一道编译原理题一个C程序的三个文件的内容如下:\x05head.h:\x05short int a = 10;\x05f
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/05 03:42:44
一道编译原理题
一个C程序的三个文件的内容如下:
\x05head.h:
\x05short int a = 10;
\x05file1.c:
\x05#include "head.h"
\x05main()
\x05{
\x05}
\x05file2.c:
\x05#include "head.h"
\x05在X86/Linux机器上的编译命令如下:
\x05cc file1.c file2.c
\x05编译结果报错的主要信息如下:
\x05multiple definition of ‘a’
\x05试分析为什么会报这样的错误.
一个C程序的三个文件的内容如下:
\x05head.h:
\x05short int a = 10;
\x05file1.c:
\x05#include "head.h"
\x05main()
\x05{
\x05}
\x05file2.c:
\x05#include "head.h"
\x05在X86/Linux机器上的编译命令如下:
\x05cc file1.c file2.c
\x05编译结果报错的主要信息如下:
\x05multiple definition of ‘a’
\x05试分析为什么会报这样的错误.
肯定的,你的a是多重定义的,原因如下:
源文件在编译时是要先预处理的,file1.c预处理的结果为
#line 1 "对应路径/file1.c"
#line 1 "对应路径/head.h"
short int a = 10;
#line 3 "对应路径/file1.c"
main()
{
}
而file2.c的预处理结果为
#line 1 "对应路径/file2.c"
#line 1 "对应路径/head.h“
short int a = 10;
它俩编译后两者的数据区都有一个类型为short int的变量a,当然肯定是报这个错误啦
源文件在编译时是要先预处理的,file1.c预处理的结果为
#line 1 "对应路径/file1.c"
#line 1 "对应路径/head.h"
short int a = 10;
#line 3 "对应路径/file1.c"
main()
{
}
而file2.c的预处理结果为
#line 1 "对应路径/file2.c"
#line 1 "对应路径/head.h“
short int a = 10;
它俩编译后两者的数据区都有一个类型为short int的变量a,当然肯定是报这个错误啦
一道编译原理题一个C程序的三个文件的内容如下:\x05head.h:\x05short int a = 10;\x05f
关于编译原理编译原理的此法分析器设计有一道题中的结尾要求中这样写到:……分析器的输入为由上述几类单词构成的程序(c语言的
代码如下:a.h文件extern int p_abs(int &a);extern int p_max(int &a,i
[编译原理]构造一个正则表达式,它接受S={a,b,c}上符合以下规则的字符串:
软件设计师 编译原理 文法的一道题,
c语言的一道题若有以下程序段:struct st{int n;int *m;};int a=2,b=3,c=5;stru
编译原理词法分析程序不要C语言的,是C++版的,
linux下的数学库头文件是什么?math.h居然没有sin,cos之类的函数定义,在windows编译通过的几个小程序
二级c语言的一道题有以下程序#include main(){ int a =-2,b=0;while(a++&&++b)
C语言一道题当执行以下程序段后,i的值是()j的值是()k的值是(){int a,b,c,d,i,j,k;a=10;b=
用C语言编译一个简单计算器的程序,要求其中有括号和幂函数
关于C语言的一个问题 int a=2 k=(++a)+(++a)+(++a) 编译后答案是13 可是为什么我算出来是12