在文件header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
其他声明
#endif
29 个解决方案
#1
没错
#2
头文件互相包含
#3
对了
#4
看不懂啊。。。。
#5
看不出问题所在
#6
膜拜楼主结帖率
#7
头文件互相包含。。。预编译时会提示错误的
#8
假如两个都没有定义,则头文件互相包含。错误。
#9
基本费了
#10
没错啊,你可以做个测试嘛,就能很明白加这些宏是干嘛的了!
测试一:
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次都不会错哦
其他声明
#endif
测试二:
在文件header2.h中:
//#ifndef _HEADER2_H //去掉这些宏
//#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次就会错哦
其他声明
//#endif
自己测试完就能明白了! 在实际应用中这些宏的使用几乎无处不在!
测试一:
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次都不会错哦
其他声明
#endif
测试二:
在文件header2.h中:
//#ifndef _HEADER2_H //去掉这些宏
//#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次就会错哦
其他声明
//#endif
自己测试完就能明白了! 在实际应用中这些宏的使用几乎无处不在!
#11
有错,假设还有.c文件来包含以上两个.h文件中的任意一个,先包含header1.h,展开头文件,发现_HEADER1_H未定义,往下执行,到header1.h中的#include "header2.h"这句代码时,转到header2.h头文件中,发现_HEADER2_H未定义,往下执行,到header2.h中的#include "header1.h"这句代码,程序又转到header1.h中,这时发现_HEADER1_H已定义,将不执行下面的代码,包含header1.h未执行,你可以实际写段代码测试下,看可报错。
#12
在文件header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
错误,#include "header3.h"应该放在#ifndef-#endif外面。
要不然就失去了#ifndef-#endif防止重复包含的意义。
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
错误,#include "header3.h"应该放在#ifndef-#endif外面。
要不然就失去了#ifndef-#endif防止重复包含的意义。
#13
学习C/C++就要学习它的精髓。。。而不是简简单单的照猫画虎。。。
这里我们写#ifdef-#endif的作用是为了防止头文件被重复包含,而不是因为别人都这样这样写所以我这样写。
这里我们写#ifdef-#endif的作用是为了防止头文件被重复包含,而不是因为别人都这样这样写所以我这样写。
#14
header1.h:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
int h1 = 1;
#endif
header2.h:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
int h2 =2;
#endif
test.c:
#include <stdio.h>
#include "header1.h"
#include "header2.h"
int main()
{
printf("%d\n", h1);
printf("%d\n", h2);
}
输出结果:
1
2
上面是我测试的代码,根本没有上面大家说的错误存在。像13、14楼说的很有道理,但那时属于编程的良好习惯,并不说明这样就是错误的
#15
????看不出,下学期学了在来回答~
#16
晕死,上面有兄弟说“像13、14楼说的很有道理”,他自己就是14楼的……
#17
0分帖还不结帖
#18
没有错啊~~
#19
不好意思啊,昨晚忙着下线竟然弄错了,应该是12、13楼
#20
没有错误,就是为了防止互包含,而设置的宏。
#21
潜在错误,相互包含
#22
潜在错误,相互包含 --支持
#23
没意义
#24
没错就是没错...
#25
这个题目考核的#if...#endif的应用。这对操作目的就是减少多次引用同一个文件;对于这个在文件header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
其他声明
#endif
初看没有什么问题,但是当两个文件多定义了函数或宏等其它内容时,相互引用就会发现错误所在。编译会出现函数或宏重定义等。如果该为下面的写法,就不会出错了。header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#ifndef _HEADER2_H
#include "header2.h"
#endif//_HEADER2_H
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#ifndef _HEADER1_H
#include "header1.h"
#endif//_HEADER1_H
其他声明
#endif
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
其他声明
#endif
初看没有什么问题,但是当两个文件多定义了函数或宏等其它内容时,相互引用就会发现错误所在。编译会出现函数或宏重定义等。如果该为下面的写法,就不会出错了。header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#ifndef _HEADER2_H
#include "header2.h"
#endif//_HEADER2_H
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#ifndef _HEADER1_H
#include "header1.h"
#endif//_HEADER1_H
其他声明
#endif
#26
...
#27
其实结贴率百分之百和百分之零对楼主和大家来说都没区别,压根儿就没分
#28
大哥,你这属烂用#if...#endif,直接把要包含的文件放外面就完了嘛,看看你写那么多#if...#endif,以后也极难维护。
#29
习惯不好。
#1
没错
#2
头文件互相包含
#3
对了
#4
看不懂啊。。。。
#5
看不出问题所在
#6
膜拜楼主结帖率
#7
头文件互相包含。。。预编译时会提示错误的
#8
假如两个都没有定义,则头文件互相包含。错误。
#9
基本费了
#10
没错啊,你可以做个测试嘛,就能很明白加这些宏是干嘛的了!
测试一:
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次都不会错哦
其他声明
#endif
测试二:
在文件header2.h中:
//#ifndef _HEADER2_H //去掉这些宏
//#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次就会错哦
其他声明
//#endif
自己测试完就能明白了! 在实际应用中这些宏的使用几乎无处不在!
测试一:
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次都不会错哦
其他声明
#endif
测试二:
在文件header2.h中:
//#ifndef _HEADER2_H //去掉这些宏
//#define _HEADER2_H
#include "header1.h"
#include "header1.h" //引用了2次就会错哦
其他声明
//#endif
自己测试完就能明白了! 在实际应用中这些宏的使用几乎无处不在!
#11
有错,假设还有.c文件来包含以上两个.h文件中的任意一个,先包含header1.h,展开头文件,发现_HEADER1_H未定义,往下执行,到header1.h中的#include "header2.h"这句代码时,转到header2.h头文件中,发现_HEADER2_H未定义,往下执行,到header2.h中的#include "header1.h"这句代码,程序又转到header1.h中,这时发现_HEADER1_H已定义,将不执行下面的代码,包含header1.h未执行,你可以实际写段代码测试下,看可报错。
#12
在文件header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
错误,#include "header3.h"应该放在#ifndef-#endif外面。
要不然就失去了#ifndef-#endif防止重复包含的意义。
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
错误,#include "header3.h"应该放在#ifndef-#endif外面。
要不然就失去了#ifndef-#endif防止重复包含的意义。
#13
学习C/C++就要学习它的精髓。。。而不是简简单单的照猫画虎。。。
这里我们写#ifdef-#endif的作用是为了防止头文件被重复包含,而不是因为别人都这样这样写所以我这样写。
这里我们写#ifdef-#endif的作用是为了防止头文件被重复包含,而不是因为别人都这样这样写所以我这样写。
#14
header1.h:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
int h1 = 1;
#endif
header2.h:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
int h2 =2;
#endif
test.c:
#include <stdio.h>
#include "header1.h"
#include "header2.h"
int main()
{
printf("%d\n", h1);
printf("%d\n", h2);
}
输出结果:
1
2
上面是我测试的代码,根本没有上面大家说的错误存在。像13、14楼说的很有道理,但那时属于编程的良好习惯,并不说明这样就是错误的
#15
????看不出,下学期学了在来回答~
#16
晕死,上面有兄弟说“像13、14楼说的很有道理”,他自己就是14楼的……
#17
0分帖还不结帖
#18
没有错啊~~
#19
不好意思啊,昨晚忙着下线竟然弄错了,应该是12、13楼
#20
没有错误,就是为了防止互包含,而设置的宏。
#21
潜在错误,相互包含
#22
潜在错误,相互包含 --支持
#23
没意义
#24
没错就是没错...
#25
这个题目考核的#if...#endif的应用。这对操作目的就是减少多次引用同一个文件;对于这个在文件header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
其他声明
#endif
初看没有什么问题,但是当两个文件多定义了函数或宏等其它内容时,相互引用就会发现错误所在。编译会出现函数或宏重定义等。如果该为下面的写法,就不会出错了。header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#ifndef _HEADER2_H
#include "header2.h"
#endif//_HEADER2_H
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#ifndef _HEADER1_H
#include "header1.h"
#endif//_HEADER1_H
其他声明
#endif
#ifndef _HEADER1_H
#define _HEADER1_H
#include "header2.h"
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#include "header1.h"
其他声明
#endif
初看没有什么问题,但是当两个文件多定义了函数或宏等其它内容时,相互引用就会发现错误所在。编译会出现函数或宏重定义等。如果该为下面的写法,就不会出错了。header1.h中:
#ifndef _HEADER1_H
#define _HEADER1_H
#ifndef _HEADER2_H
#include "header2.h"
#endif//_HEADER2_H
其他声明
#endif
在文件header2.h中:
#ifndef _HEADER2_H
#define _HEADER2_H
#ifndef _HEADER1_H
#include "header1.h"
#endif//_HEADER1_H
其他声明
#endif
#26
...
#27
其实结贴率百分之百和百分之零对楼主和大家来说都没区别,压根儿就没分
#28
大哥,你这属烂用#if...#endif,直接把要包含的文件放外面就完了嘛,看看你写那么多#if...#endif,以后也极难维护。
#29
习惯不好。