两个c源编译程序
要知道,一个系统生成的程序文件夹里,只可能有一个源程序,打开两个必然会冲突啊。
你可以打开两个VS来进行对两个源程序的编译。
㈡ C语言文件的编译与执行的四个阶段并分别描述
开发C程序有四个步骤:编辑、编译、连接和运行。
任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。
1、预处理:导入源程序并保存(C文件)。
2、编译:将源程序转换为目标文件(Obj文件)。
3、链接:将目标文件生成为可执行文件(EXE文件)。
4、运行:执行,获取运行结果的EXE文件。
(2)两个c源编译程序扩展阅读:
将C语言代码分为程序的几个阶段:
1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。
2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。
3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。
4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。
㈢ 求助:在linux下,我有两个.C源文件,怎么编译到一起
编译没问题,但不能连接成一个程序,否则就会出现 main() 函数的重复定义错误
最简单的办法是,写一个 shell 脚本 c,内容是:
./b
./a
chmod a+x c
㈣ C语言如何将两个源程序文件连接在一起编译
你建个项目(project),把两个文件放在一起就行了。
㈤ 为什么两个c源程序都包含stdio.h。 而链接时不会出现重定义,stdio里不是定义了许多函数ma
1、如果引用了多次,会导致重复定义函数错误,所以多次导入需要做如下处理。
2、采用#ifndef避免重复导入。
格式如下:
#ifndef __SOMEFILE _H_
#define __SOMEFILE _H_
...//一些声明语句
#endif
#ifdndef的方式依赖于宏名不允许冲突。这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会不小心被同时包含。缺点是如果不同头文件的宏名不小心相同,那么可能会导致头文件明明被include了,编译器却说找不到声明的状况。
3、你说多次导入没问题,那应该是用了2的方法
㈥ 小弟最近编写了两个c语言源程序,但其中种种问题无法解决,特来求助
首先我们来讨论下第一个程序。
第一个程序的问题并不大,编译的时候编译器提示:
错误3errorC3861:“getch”:找不到标识符
我们分析这个错误,是编译器无法识别"getch"这个函数。经过查询,我们了解到getch()函数的确存在,并且详细信息如下:
函数名
getch
功 能
在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。
返回值
从键盘上读取到的字符
头文件
#include <conio.h>
注意这里提到的头文件,就是包含了这个函数定义的文件,你需要在文件开始加入进去进行编译才可以。所以加入#include <conio.h>后即编译通过!
程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
intmain()
{
FILE*out;
charoutfile[20],ch;
longi=0;
printf("! ");
scanf("%s",outfile);
if((out=fopen(outfile,"r"))==NULL)
printf("NO! ");
for(i=0;!feof(out);i++)
ch=fgetc(out);
fclose(out);
getch();
return0;
}
再来看第二个程序。
首次编译后提示错误如下:
错误5errorC3861:“fcloce”:找不到标识符
提示如同上一个程序中关于"getch"的提示。我们查询后发现floce并不存在,但是联系上下文可以判断此处应当是关闭文件指针的操作,对应的函数应当为fclose。因此将其更改为fclose(in)即可编译通过。
程序如下:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
FILE*in,*out;
charch,infile[20],outfile[20];
longi=0;
printf("in ");
scanf("%s",infile);
printf("out ");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("NOin! ");exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("NOout! ");exit(0);
}
for(i=0;!feof(in);i++)
{
ch=fgetc(in);
fputc(ch,out);
printf("%ld//**** ",i);
}
fclose(in);
fclose(out);
return0;
}
问题都是小问题,但是反映出了一些问题。
1、首先是程序的书写问题。程序二中你将fclose(in)和fclose(out)放在了一行里书写,这样如果某一个语句出现了错误,程序提示错误出现在第几行的时候你无法准确判断究竟是哪一个语句出现了错误。所以建议单条语句单行书写。
2、其次是关于定义变量时的书写问题。我注意到你在定义文件指针的时候是将FILE*in,out;连在一起书写的。其实在定义指针类型的变量的时候,*号是跟随着变量名称的,所以尽量在FILE和*号之间添加上一个空格,便于查看。
3、最后是关于查看错误信息的能力问题。通常编译错误的时候,编译器都会明确的通知你错误是什么,以及错误出现在程序中的第几行。有时候可能编译器显示不全,你可以右键后点击复制,然后将其错误信息粘贴出来查看。如下图所示:
如果实在不知道如何来解决,可以尝试将错误信息黏贴到网络或是其他搜索引擎上面查找,试图看看有没有网友遇到过相同或是相似的问题,从而获得解决办法。
望有所帮助,并祝愿楼主编程能力更进一步!
㈦ 如何将两个c语言源程序合并在一起编译成一个hex文件,使之发挥不同的作用。如图
好像不能吧,每个程序中只能有一个main函数的,也只能转换成一个hex文件,
两个的话,只能改程序
㈧ 怎么连接两个C程序的源文件啊
c和c++的多文件编程规则是有差别的。下面只描述c的(主要是语法要求不太一样,体现在编译层面)。
简单来说,有两个层面的问题:
1
编译问题
2
链接问题
1
编译问题:
就是你的代码要能够编译通过,编译主要是对语法的检查。例如:
1
a文件用b文件里的函数问题:在c语言中,a文件用b文件的函数,缺省不用做任何说明(缺省就是全局函数,注意不能是static函数,当然建议写上extern的引用说明)。
2
但是如果a文件要用b文件的结构体。那么必须把结构体放到头文件里,两个源文件都去include。
不罗列了,简单来说,代码要复合c的语法要求。
2
链接问题:
多个源文件可以编译成编译单元(编译做得事),并且把这些编译单元链接到一起形成最终的可执行文件或动态/静态库。
注:编译单元,.o文件。
举例:有a.c和b.c
以gcc编译来说:(不考虑其他编译和链接情况)
gcc
-c
a.c
//生成a.o
gcc
-c
b.c
//生成b.o
gcc
-o
hello
a.o
b.o
//
a.c和b.c里面一个必须有main函数。输出hello可执行程序。
如果是在集成开发环境,例如vc、devc++、codebloker等。就在软件相关工程属性里勾选上或增加源文件就行。(工具屏蔽了编译链接技术细节)
㈨ 建立两个C++源程序,先打开第一个,编译运行后,再打开第二个进行编译运行,会出现什么问题原因
会出现main already defined in Cpp1,one or more multiply defined symbols found,编译不会出错,但是组建就会出现上述情况,有1个或更多的主函数发现,但是只允许一个main函数,要在文件栏关闭工作区,才能打开另外一个。
㈩ visual studio 2008中怎么样编译两个C语言程序
1、文件--新建--项目--visual
c++--win32--控制台应用程序
2、解决方案--源文件--右击--添加--新建项--visual
c++--c++文件(.cpp)
写程序就行了
如果提示有错误的话一般情况是缺少系统组建,也就是vs2008安装文件是损坏的,故要重新下载