c编译单元
① c语言源程序的基本单位是什么
函数吧
② 怎么编译多个c语言文件
1、如果,在一个c主程序中,以include形式包含了其他所有的引用文件,在编译过程中,编译器首先会将这些文件合并到一个临时文件中,然后再对这个临时文件进行编译。
2、如果,是作为一个工程,编译器会分别编译各个独立的文件(如果文件中有include按照上一步进行),然后再将编译好的初步结果用链接程序连到一起。
简单的说,每一个.c或者.cc都是一个编译单元,每一个编译单元编辑的结果是一个.o或者obj之类的中间文件,至于是否是多文件,不需要关心,但是要保证不同的编译单元之间不要有重复的符号,这就是要避免重复包含。
每一个编译单元生成的目标文件.o或者obj都会引用一些不在本目标文件中的符号,这些符号定义在别的.o或者.obj文件中, 链接器把他们联系在一起,所有的符号也就都有定义了,编译链接简单说来就是这样。
③ c语言编译错误
main()
{int a,b;
float c;
scanf("%d%c%d",&a,&c,&b);
switch(c) /*c为浮点型,作为测试表达式的话,和下面矛盾。*/
{case '+':{c=a+b;printf("%d\n",c)};break; /*此处c是测试表达式,再将a+b赋给它,会引c单元空间不足(0<c<128),可以将结果赋给a或b,还可以重新定义一个变量,下面同理。这行及下面三行的{}可以省去*/
case '-':{c=a-b;printf("%d\n",c)};break;
case '*':{c=a*b;printf("%d\n",c)};break;
case '/':{c=a/b;printf("%d\n",c)};break;
default: printf("error");} /*此处}不多余。*/
}
可以改成这样(仅作参考):
main()
{float a,b,result;
char c;
scanf("%d%c%d",&a,&c,&b);
switch(c)
{case '+':result=a+b;printf("%f\n",result);break;
case '-':result=a-b;printf("%f\n",result);break;
case '*':result=a*b;printf("%f\n",result);break;
case '/':result=a/b;printf("%f\n",result);break;
default: printf("error");}
}
④ 若定义 int x [10];则 Turbo C编译系统为该数组分配多少个字节存储单元
在C语言里,int c[10]只有10个单元,即c[0]~c[9],这一点是与VB不一样的。
所以,是2*10=20个字节的存储单元。
⑤ c语言中编译后得到的目标文件为什么不能直接运行,必须连接后才能运行
一编译单元(一个c文件)就会得到一个目标文件,而最终程序是一个EXE。所以需要链接。
同时链接需要按照操作系统的可执行文件格式要求组织。
⑥ 在C/C++中,什么叫编译单元
可以这样的理解:
编译单元
当一个c或cpp文件在编译时,预处理器首先递归包含头文件,
形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。
这个编译单元会被编译成为一个与cpp 文件名同名的目标文件 。
连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。
⑦ C语言程序编译成功了,为什么连接还出错
1 编译阶段,执行的是对单个文件的转换,从源代码转换成二进制文件。
2 链接阶段,将每个源文件转成的二进制文件,及相关的系统库文件共同打包生成可执行文件。
3 从定义上可以看出,链接阶段,出现错误有两种可能:
1) 函数中引用了不存在的函数。
2) 编译环境有问题,导致ld出错。
⑧ c语言是如何编译成二进制
计算机专业有门课程叫做《编译原理》,详细讲述了怎么把高级语言翻译成汇编语言活着机器能看懂的二进制代码。
简单的说,C语言是通过编译器翻译成二进制代码的(就像英译汉的软件把英文翻译成汉语一样。把高级语言翻译成机器语言过程很复杂,学了编译原理就懂了)。还有编译器可以用各种语言编写,C语言可以被用C语言写的编译器来编译。
⑨ 在C/C++中,什么叫编译单元
可以这样的理解:
编译单元
当一个c或cpp文件在编译时,预处理器首先递归包含头文件,
形成一个含有所有
必要信息的单个源文件,这个源文件就是一个编译单元。
这个编译单元会被编译成为一个与cpp
文件名同名的目标文件
。
连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。
⑩ 怎么用VC++2008编译C语言程序
你用过Visual
Studio中文版么?要是没用过就试试吧!全中文的界面,不至于让你连创建工程都要问问题……
有什么问题直接找我!我是.net程序员