23 个解决方案
#1
#2
只能在CPP里包含.H
#3
头文件保护木有用 抽象出一个泛型使用
#4
不可以,逻辑上都不能通过
需要用到互包含的时候,都可以用简单包含解决,不知道LZ是因为什么?
需要用到互包含的时候,都可以用简单包含解决,不知道LZ是因为什么?
#5
可以吧
#6
这样不行吧,不过你可以将两个头文件共用的那一部分抽出来单独建一个头文件
#7
加预处理#ifndef.. #define...#endif
#8
#9
在文件bsp.h和LocDongle.h中这样写就可以避免重复包含了:
//bsp.h
#ifndef _BSP_H_
#define _BSP_H_
#include "LocDongle.h"
#endif
//LocDongle.h
#ifndef _LOCDONGLE_H_
#define _LOCDONGLE_H_
#include "bsp.h"
#endif
#10
头文件保护有用, 可以这样重复包含
头文件包含其实就是在包含的位置展开它而已,
你如果a.h包含了b.h
b.h又包含了a.h
如果你使用了#ifndef.. #define...#endif的话
你在一个.c文件中包含a.h那么它里面包含的b.h中包含的a.h将不会重复包含
头文件包含其实就是在包含的位置展开它而已,
你如果a.h包含了b.h
b.h又包含了a.h
如果你使用了#ifndef.. #define...#endif的话
你在一个.c文件中包含a.h那么它里面包含的b.h中包含的a.h将不会重复包含
#11
不能包含 但是可以通过预编译解决这个问题
#12
这样不行吧。。。还是会出现先有蛋还是先有鸡的问题,不管用哪种方式,还是得把共用的那部分独立出来,单独加上宏保护也行。
#13
我觉得头文件的嵌套应该是没有什么问题的,但是头文件的嵌套如果你没有加上编译预处理的选项,则会出现一个无限的循环,因此这个应该很重要的!!!头文件的嵌套一定要防止不断的包含,处于一个无限的循环!
#14
error: #include nested too deeply
#15
回复14楼:
我说的那个嵌套问题不是说可以无限的嵌套,标准要求c编译器必须支持至少8层的头文件嵌套 ,并没有限定嵌套深度的最大值。
而事实上我们没有什么理由让嵌套深度超过1层或者2层!!!
我说的那个嵌套问题不是说可以无限的嵌套,标准要求c编译器必须支持至少8层的头文件嵌套 ,并没有限定嵌套深度的最大值。
而事实上我们没有什么理由让嵌套深度超过1层或者2层!!!
#16
不可以。可以把公共部分提取出来,单独作为一个头文件。
#17
赞一个
#18
同意
#19
.c文件中包含.h文件时,要么包含bsp.h、要么包含LocDongle.h、要么都包含,不管是哪一种情况,.c文件里总有个引用头文件的包含顺序,是先有鸡还是先有蛋就看这个顺序咯,要不只有两个头文件而没有其他文件调用、那定义这两个头文件来干啥~~
#20
//bsp.h
#ifndef _BSP_H_//文件开始、第一行
#define _BSP_H_
#include "LocDongle.h"
...//内容,所有的函数声明等等放这里
#endif//文件末尾
//LocDongle.h
#ifndef _LOCDONGLE_H_//文件开始、第一行
#define _LOCDONGLE_H_
#include "bsp.h"
...//内容,所有的函数声明等等放这里
#endif//文件末尾
#21
乱说
#22
兄弟,用的时候include两次不就得了吗,干嘛那么费劲的搞嵌套
#23
没有满意答案
#1
#2
只能在CPP里包含.H
#3
头文件保护木有用 抽象出一个泛型使用
#4
不可以,逻辑上都不能通过
需要用到互包含的时候,都可以用简单包含解决,不知道LZ是因为什么?
需要用到互包含的时候,都可以用简单包含解决,不知道LZ是因为什么?
#5
可以吧
#6
这样不行吧,不过你可以将两个头文件共用的那一部分抽出来单独建一个头文件
#7
加预处理#ifndef.. #define...#endif
#8
#9
在文件bsp.h和LocDongle.h中这样写就可以避免重复包含了:
//bsp.h
#ifndef _BSP_H_
#define _BSP_H_
#include "LocDongle.h"
#endif
//LocDongle.h
#ifndef _LOCDONGLE_H_
#define _LOCDONGLE_H_
#include "bsp.h"
#endif
#10
头文件保护有用, 可以这样重复包含
头文件包含其实就是在包含的位置展开它而已,
你如果a.h包含了b.h
b.h又包含了a.h
如果你使用了#ifndef.. #define...#endif的话
你在一个.c文件中包含a.h那么它里面包含的b.h中包含的a.h将不会重复包含
头文件包含其实就是在包含的位置展开它而已,
你如果a.h包含了b.h
b.h又包含了a.h
如果你使用了#ifndef.. #define...#endif的话
你在一个.c文件中包含a.h那么它里面包含的b.h中包含的a.h将不会重复包含
#11
不能包含 但是可以通过预编译解决这个问题
#12
这样不行吧。。。还是会出现先有蛋还是先有鸡的问题,不管用哪种方式,还是得把共用的那部分独立出来,单独加上宏保护也行。
#13
我觉得头文件的嵌套应该是没有什么问题的,但是头文件的嵌套如果你没有加上编译预处理的选项,则会出现一个无限的循环,因此这个应该很重要的!!!头文件的嵌套一定要防止不断的包含,处于一个无限的循环!
#14
error: #include nested too deeply
#15
回复14楼:
我说的那个嵌套问题不是说可以无限的嵌套,标准要求c编译器必须支持至少8层的头文件嵌套 ,并没有限定嵌套深度的最大值。
而事实上我们没有什么理由让嵌套深度超过1层或者2层!!!
我说的那个嵌套问题不是说可以无限的嵌套,标准要求c编译器必须支持至少8层的头文件嵌套 ,并没有限定嵌套深度的最大值。
而事实上我们没有什么理由让嵌套深度超过1层或者2层!!!
#16
不可以。可以把公共部分提取出来,单独作为一个头文件。
#17
赞一个
#18
同意
#19
.c文件中包含.h文件时,要么包含bsp.h、要么包含LocDongle.h、要么都包含,不管是哪一种情况,.c文件里总有个引用头文件的包含顺序,是先有鸡还是先有蛋就看这个顺序咯,要不只有两个头文件而没有其他文件调用、那定义这两个头文件来干啥~~
#20
//bsp.h
#ifndef _BSP_H_//文件开始、第一行
#define _BSP_H_
#include "LocDongle.h"
...//内容,所有的函数声明等等放这里
#endif//文件末尾
//LocDongle.h
#ifndef _LOCDONGLE_H_//文件开始、第一行
#define _LOCDONGLE_H_
#include "bsp.h"
...//内容,所有的函数声明等等放这里
#endif//文件末尾
#21
乱说
#22
兄弟,用的时候include两次不就得了吗,干嘛那么费劲的搞嵌套
#23
没有满意答案