69,371
社区成员
发帖
与我相关
我的任务
分享
#ifndefine
#define
#endif
这类条件编译是为了防止同一个.c文件包含同一个头文件多次。
楼主要明白:每一个.c文件最后都会编译生成对应的.obj文件的。所以你的两个.c文件对应的两个.obj文件都会有你说的那个全局变量的,链接的时候,链接器就会发现有定义了两个同名变量,于是就报multiple definition错误。
正确的做法是:是其中一个.c文件定义这个变量,在另外一个.c文件用
extern int g_a;
声明,这就可以在两个.c都使用这个变量了。[/quote]
恩,谢谢,我最后就是用extern来解决的,只不过对于条件编译有些疑问而已。因为目前没有遇到过一个.c文件包含另一个.c的情况,我认为这应当是尽量避免的。[/quote]
不是一个.c文件包含另外一个.c文件。没有人会这样组织代码的。
条件编译为了防止一个.c文件多次包含一个.h文件。
比如有a.h, b.h,main.c三个文件,b.h文件include了a.h文件。而在main.c文件中首先include了a.h,然后再include了b.h文件。这样就会出现包含一个头文件多次的情况。这时条件编译就能派上用场了。[/quote]
恩,谢谢,这样我就懂了。虽然这种情况下不包含a.h直接包含b.h就可以了,不过在大型工程项目中应该很有难度。
#ifndefine
#define
#endif
这类条件编译是为了防止同一个.c文件包含同一个头文件多次。
楼主要明白:每一个.c文件最后都会编译生成对应的.obj文件的。所以你的两个.c文件对应的两个.obj文件都会有你说的那个全局变量的,链接的时候,链接器就会发现有定义了两个同名变量,于是就报multiple definition错误。
正确的做法是:是其中一个.c文件定义这个变量,在另外一个.c文件用
extern int g_a;
声明,这就可以在两个.c都使用这个变量了。[/quote]
恩,谢谢,我最后就是用extern来解决的,只不过对于条件编译有些疑问而已。因为目前没有遇到过一个.c文件包含另一个.c的情况,我认为这应当是尽量避免的。[/quote]
不是一个.c文件包含另外一个.c文件。没有人会这样组织代码的。
条件编译为了防止一个.c文件多次包含一个.h文件。
比如有a.h, b.h,main.c三个文件,b.h文件include了a.h文件。而在main.c文件中首先include了a.h,然后再include了b.h文件。这样就会出现包含一个头文件多次的情况。这时条件编译就能派上用场了。
#ifndefine
#define
#endif
这类条件编译是为了防止同一个.c文件包含同一个头文件多次。
楼主要明白:每一个.c文件最后都会编译生成对应的.obj文件的。所以你的两个.c文件对应的两个.obj文件都会有你说的那个全局变量的,链接的时候,链接器就会发现有定义了两个同名变量,于是就报multiple definition错误。
正确的做法是:是其中一个.c文件定义这个变量,在另外一个.c文件用
extern int g_a;
声明,这就可以在两个.c都使用这个变量了。[/quote]
恩,谢谢,我最后就是用extern来解决的,只不过对于条件编译有些疑问而已。因为目前没有遇到过一个.c文件包含另一个.c的情况,我认为这应当是尽量避免的。
#ifndefine
#define
#endif
这类条件编译是为了防止同一个.c文件包含同一个头文件多次。
楼主要明白:每一个.c文件最后都会编译生成对应的.obj文件的。所以你的两个.c文件对应的两个.obj文件都会有你说的那个全局变量的,链接的时候,链接器就会发现有定义了两个同名变量,于是就报multiple definition错误。
正确的做法是:是其中一个.c文件定义这个变量,在另外一个.c文件用
extern int g_a;
声明,这就可以在两个.c都使用这个变量了。