您的位置:

模板生成c语言,模板生成c语言的软件

本文目录一览:

怎样用kdevelop创建C语言工程?

1. KDevelop只是一个IDE,要想编译C语言程序,要安装make和GCC,以及头文件,那就从这里开始:

sudo apt-get build-dep gcc

sudo apt-get install build-essential

2.安装KDevelop

sudo apt-get install kdevelop3

3.安装好后,可以在应用程序-编程 中看到 KDevelop了。下面这个使用KDevelop开发程序是转的,偷下懒:-)

基本步骤

一般而言,用KDevelop编程大体要经历如下几个步骤。编程是比较复杂的,很难一次成功,这些步骤

可能要反复进行多次。

在Ubuntu软件中心里安装了KDevelop后,从模版新建了个Terminal的C++工程,在Build Selection后,点击“可执行文件”却跑不起来,还需要做如下的配置。

选择“运行”-》“配置启动器”

第一步,新建工程

可以通过菜单操作启动相应的向导程序,借助它完成工程的初建工作。

【Project】→【New Project】

在新建工程过程中,主要需要指定工程文件保存位置、工程名称、工程类型,并且可以填写编程作者

的信息。根据所选工程类型(比如,是文本界面的程序还是图形界面的程序,是C程序还是C++程序),向导程序会自动生成一批模板文件。

第二步,编辑程序文件

向导程序一般会创建一些程序文件,应该对这些文件进行编辑以满足特定的编程需要。

还可以执行菜单操作来增加新的文件。

【File】→【New】

上述操作后,会出现一个对话框,用于指定文件名和文件类型。根据文件类型的不同,会自动设定合

适的扩展名。注意,“Add to project”复选框应该勾选上以确保新文件被加入到当前的工程中。

第三步,生成源码结构

在编辑好程序文件后,要先借助GNU Build System生成系统生成源码结构。在增加了新文件(或目

录)、修改了文件(或目录)名、改变文件的保存位置之后,都应该重新生成源码结构。具体而言,生成源码结构包括autoconf、automake等操作,把每个子目录的Makefile.am变成了Makefile.in。具有源码结构的程序文件包可以在任何UNIX、LINUX的系统上使用简单的命令(即configure/make/make install等)进行配置、编译、连接和安装。

可以执行菜单操作来生成源码结构:

【Build】→【Run automakeconf】

第四步,配置,即运行configure

configure是一个脚本,用来确定所处系统的细节,比如使用何种编译器、何种库,以及编译器和库的

保存位置,并把Makefile.in的相应部分进行替换,形成Makefile。

可以执行菜单操作来进行配置:

【Build】→【Run configure】

第五步,编译连接

执行菜单操作【Build】→【Built Project】即可完成编译连接,形成可执行文件。默认情况下,这种可执行文件是带有源码调试符号的。

对于多文件的程序,一般需要对每一个文件分别进行编译生成目标文件。当每个文件的编译通过之后,再统一进行编译连接。单独编译当前正在编辑的文件的菜单操作是:

【Build】→【Compile File】

第六步,运行

如果想在KDevelop的控制下运行已编译连接好的程序,可以执行菜单操作:

【Build】→【Excecute program】

如果想单独运行程序,则需要先安装,然后在命令行中输入相应的可执行文件的名字(一般来讲,就是

工程的名字)即可。KDevelop会把可执行文件放在/usr/local/bin之中

【Build】→【Install】

编写程序文件

通过菜单操作【Project】→【New Project】启动新建工程向导程序,选择工程类型,并指定 工程名称及其保存位置,如图所示。接下来一路点击Next即可完成工程的创建工作。

向导程序会自动生成一个含有主函数的文件。以此文件是一个模板,在它的基础上修改并添加代码,

即可编写需要的程序。

编译

程序写好后,应该把文件保存起来,然后按照前面提到的步骤,生成源码结构、配置、编译,即依次

执行如下菜单操作:

【Build】→【Run automakeconf】

【Build】→【Run configure】

【Build】→【Compile File】

每一个操作若能正常完成,在Messages窗口中会出现Success的提示。如果没有Success的提示,则表明相应的操作失败,应查明原因。

一般来讲,生成源码结构和配置这两个操作都能顺利通过。

如果编译连接是首次进行,则一般会失败,因为很少有人能一次写出没有任何语法错误的程序。查看

Messages窗口中的提示信息,可以了解哪些地方出现了语法错误。单击某一条错误提示信息,KDevelop会自动把光标定位到发生该错误的语句上。

依据错误提示,修正程序中的语法错误,然后再次尝试编译,直到出现Success的提示。

经常出现的一种情况是,程序上的一个语法错误会导致多条错误信息的出现。因此,应该把第一条错

误信息认真处理好,再从随后的错误信息中随机选择几条加以处理,然后就再次尝试编译,看还有没有错误信息。如此反复多次,直到把所有的错误提示消除掉,编译就成功了。不要把所有错误信息都依次处理完再尝试编译,那样的效率比较低。

生成可执行文件

编译成功后,执行菜单操作【Build】→【Built Project】即可生成相应的生成可执行文件。

调试

接下来,可以执行菜单操作【Build】→【Excecute program】试运行程序。这种运行是在KDevelop的控制下进行的。因此,如果出现“死循环”,可以执行菜单操作【Build】→【Stop】或按Esc键即可中止程序的运行。

如果在程序中存在逻辑错误,就得不到期望的结果。逻辑错误的排除比较困难。必须对程序进行仔细

的分析才能找到错误的原因。

一般的逻辑错误可以根据程序的运行表现加以判断。比较深层次的逻辑错误则需要借助调试工具。

本章前面介绍的调试工具GNU gdb就是一个很好的工具,可以用它对程序进行仔细分析,查找逻辑错

误的根源。默认情况下,经过【Build】→【Built Project】操作之后,可以在工程目录下的/debug/src/中找到带源代码调试符号的可执行文件。

发现逻辑错误后,就要修改程序,重新编译连接。然后再试运行。如果仍然得不到期望的结果,说明

程序中还有逻辑错误,应再次进行分析。如此反复多次,直到消除全部的逻辑错误。

发布可执行文件

如果只想发布程序的可执行文件,可以先调整项目的编译连接选项,选择优化编译的方式。这样可以

得到更小更快的可执行文件。

可以通过菜单【Project】→【Build Configuration】修改编译连接选项。此菜单之下有三种选项,默认为Debug,生成的可执行文件中含有源程序调试符号;还可以选择 Default或Optimized。选择Optimized时,编译连接时将进行优化,生成的可执行文件更小,执行起来也更快。

选择Debug时,可执行文件保存在工程目录下的/debug/src/中;选择Optimized时, 可执行文件保存在工程目录下的/optimized/src/中;选择Default时, 可执行文件保存在工程目录下的/src/中。

如果要发布可执行文件,应该选择Optimized的方式进行编译连接。

发布源程序

把工程目录及其中的所有文件打包即可形成源程序包。用户得到这个源程序包并解压后,不必安装KDevelop 就可以按标准方法进行编译和安装,即支持

configure,make,make install,make clean,make uninstall等命令。这个包也含有KDevelop的工程文件和其他相关的信息。因此,如果用户安装了KDevelop,可以直接打开该工程进行修改。

如何使用已有的源文件?

在KDevelop主窗口的右侧有一个Automake Manager标签。点击该标签,就可以看到本工程源文件所在的文件夹以及各文件。在列有文件的那个窗口上方有工具条,其中就是用来添加文件的。添加文件有两种方式,一种是链接(link)方式,另一种是复制(copy)方式。

2楼

云淡风轻 发表于:2007-6-15 14:34:31

4.遇到的问题,按照上面的方法编译第一个程序时遇到了问题:

a)运行Run automakefriend时,报错:

这是由于没有安装automake造成的,解决方法是在终端中运行下列代码:

b)再次运行Run automakefriend时遇到错误:

这是由于没有安装libtool造成的,解决方法是

c)终于编程通过了,但是在Excecute program又提示错误了:

konsole not found

这是由于没有安装konsole造成的,安装就好了

再次运行,终于看到结果了,收工(*^__^*)

sudo apt-get install konsole

sudo apt-get install libtool

macro `AM_PROG_LIBTOOL' not found in library

make: *** [all] Error 1

*** Exited with status: 2 ***

sudo apt-get install automake1.9

cd '/home/long/code/dev/test'  WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" make -f Makefile.cvs

aclocal

make: aclocal:命令未找到

make: *** [all] 错误 127

*** Exited with status: 2 ***

c语言生成dat文件

1、首先打开vs软件,选择新建一个项目。

2、新建项目后,选择win32工程,给项目起名字,选择项目默认的路径,然后点击确定。

3、选择项目的类型为DLL库,可以选择建一个空项目,也可以选择win32项目,不为空,根据自己的需要。

4、然后在项目的源文件中添加一个cpp文件,写入要编译的代码,然后点击生成。

5、在Vs的输出界面中就可以看到编译成功了,会看到生成DLL文件的路径,也可以自己设置DLL文件的生成路径。

c语言程序模板

//考虑在输入非数字或非纯数字的时候要报错

main()

{

char str[100];

int i;

float c, f; //声明摄氏和华氏温度变量

printf("请输入华氏温度:"); //提示输入华氏温度

scanf("%s", str); //将输入的字符串保存到变量str数组中

for (i = 0; i strlen(str); i++) {

if (str[i] '0' || str[i] '9') {

printf("输入不是纯数字");

return;

}

} //判断输入的字符串里是否只有数值字符

f = atof(str); //将数值字符转换成浮点数

c = 5.0 / 9 * (f - 32); //计算摄氏温度

printf("摄氏温度是%0.2f", c); //保留两位小数输出

}

//直接运行通过

在c语言中如何实现函数模板

如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求…

      考虑了一阵子后,就想到了qsort上.qsort的函数原型:

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

      快排时,只要自己实现相应数据类型的比较函数cmpare就可以了.如果比较int型时,一个典型的compare函数如下:

那么,就是说可以利用void *. void *意指未指定类型,也可以理解为任意类型。其他类型的指针可以直接赋值给void *变量,但是void *变量需要强制类型转换为其它指针类型。这个相信大家都知道。那么下面以一个简单的题目为例,来探讨如何在C语言中实现模板函数。

      方法1: 利用void *.

    在看下面的源程序之前,需要了解几点。首先,在32位平台上,任何类型的指针所占的字节都是4个字节,因为32位机器虚拟内存一般为4G,即2的32次方,只要32位即4个字节就可以足够寻址,sizeof(void *)=4; 其次,虽然各种不同类型的指针所占的空间都为4个字节,但是不同类型的指针所指的空间的字节数却不同(这一点尤为重要,下面的程序我在开始没有调通就因为这点意识不强)。所以,如果你将一个指针强制转换为另一个类型的指针,指针本身所占的字节是不变的,但是,如果对这个指针进行运算,比如 *p,p++,p-=1等一般都是不同的。 再次,函数指针应该了解下,这里不多说。 最后,因为Sandy跟我说,C++开始的时候模板的实现其实就是利用宏替换,在编译的时候确定类型。所以,为了方便,类型也用了预编译指令#define。

span#include "stdio.h"/span

span#include "stdlib.h"/span

span//typedef int T;  //或者下面的也可以./span

span#define  T int/span

//这个FindMin是Sandy写的.felix021也写了个,差不多的就不贴出来的.

void FindMin(const void  *arr,int arr_size,int arrmembersize,int *index,

int (*cmp)(const void *,const void *b)){

int i;

*index=0;

char *p=(char *)arr;

char *tmp=p;

for (i=1;iarr_size ;i++){

if (cmp(tmp,p)0){

tmp=p;

}

p+=arrmembersize;

}

(*index)=((int)(tmp-arr))/arrmembersize;

}

*//span

可以把指针看作是char *,如果转换为int *,那下面的位移就不正确了./span

indexspan=/spanispan;/span

span}/span

span}/span

spanreturn/span indexspan;/span

span}/span

spanint/span resultspan;/spanspan//result保存的是最小值索引./span

resultspan=/spanFindMinspan(/spanarr,span12/span,