一道编译原理题一个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 f

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 15:41:49
一道编译原理题一个C程序的三个文件的内容如下:\x05head.h:\x05short int a = 10;\x05file1.c:\x05#include

一道编译原理题一个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 f
一道编译原理题
一个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 f
肯定的,你的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,当然肯定是报这个错误啦