user-0 提问: [预编译大牛请进]C 语言中如何解决头文件中互相嵌套问题!!!!!!头疼

回复:
user: user-0
content: 引用 19 楼 rogone 的回复:#pragma once  这个没有用的

user: user-1
content: #pragma once

user: user-2
content: 相互包含头文件，说明程序结构有问题，重新思考划分模块

user: user-3
content: 引用 9 楼 Z_R_Z_798205 的回复:[quote=引用 7 楼 user-7 的回复:] 把公共的宏单独放在一个独立的头里面。 这个方法可行,但是由于项目的不断扩大,这个方法不是长久之策[/quote] 检讨一下设计吧。windows linux office都是巨无霸项目，你这才多少代码就有这种问题。

user: user-4
content: 参考大项目的源码中是如何#define和#undef宏的。比如include\stdlib.h

user: user-0
content: 大家好,针对随着代码的不断扩大,头文件应用问题我是这么处理的. 按下面原则,优先级依次降低; 1. 原则上头文件不引用任何头文件. 2. 避免头文件引用成死循环. 2. 如果头文件有数据定义,满足数据定义成员的类型的头文件引用. 3. 如果宏定义引用其他头文件,此时引用相应的头文件 4. 如果出现因 inline 函数参数引用其他头文件,则引用头文件. 4. 如果因 inline 函数内部或数据定义时需要引用其他头文件或者 C 文件,则统一使用 extern.  通过上面几个原则,轻松搞定五十多个头文件的项目,debug 起来 error 和 warning 以及 note 轻松解决. 始终坚持的原则就是头文件高内聚低耦合.  调试 warning 和 note 的时候真的变容易太多了!!!!!!!

user: user-5
content: 恭喜恭喜恭喜恭喜

user: user-0
content: 引用 14 楼 jiqiang01234 的回复:相互包含头文件，说明程序结构有问题，重新思考划分模块  已经重构了头文件的架构,原则上高内聚低耦合,数据定义优先,inline 函数次之的原则,很有效的解决头文件混用问题.

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:参考大项目的源码中是如何#define和#undef宏的。比如include\stdlib.h 已经找到替代方法了,采用高内聚低耦合,数据定义优先,inline 函数次之的原则. 已经解决问题,谢谢  引用 13 楼 akirya 的回复:[quote=引用 9 楼 Z_R_Z_798205 的回复:] [quote=引用 7 楼 user-7 的回复:] 把公共的宏单独放在一个独立的头里面。 这个方法可行,但是由于项目的不断扩大,这个方法不是长久之策[/quote] 检讨一下设计吧。windows linux office都是巨无霸项目，你这才多少代码就有这种问题。[/quote]  重新思考了头文件的设计,原则上高内聚低耦合,数据定义优先,inline 函数次之的原则,很有效的解决头文件混用问题. 初期的架构很重要,头文件五十个左右,c 文件三十个左右,通过这种头文件架构原则,重源头上避免了很多 warning 的产生.

user: user-0
content: 引用 10 楼 paschen 的回复:不要想互包含， 不然试下把个每个函数、变量、宏单独用下面这个包含（而不是整个文件）  #ifndef XXX     #define XXX      #endif 这样有点不好,我在写 Linux 内核的一个模块,出现这个问题我参照内核头文件的引用, 初步看是可以互相引用,而且由于互相引用导致函数问题我是有方法解决的,但头文件中的 宏定义就很麻烦处理! 谢谢,能不能帮我想想更好的解决办法.

user: user-6
content: 不要想互包含， 不然试下把个每个函数、变量、宏单独用下面这个包含（而不是整个文件）  #ifndef XXX     #define XXX      #endif

user: user-0
content: 引用 7 楼 user-7 的回复:把公共的宏单独放在一个独立的头里面。 这个方法可行,但是由于项目的不断扩大,这个方法不是长久之策

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:楼主自己解套，这个总比股票解套容易。  嵌套导致的函数引用问题,我有办法解决, 但嵌套导致的宏问题,我不知道怎么解决, 我贴了代码,帮我预处理分析一下.谢谢

user: user-0
content: 引用 4 楼 paschen 的回复:自己更清关系，再不会参看一下标准库里各头文件怎么包含的 就算出现头文件嵌套导致函数相关问题,我都有解决的办法. 但如果嵌套时有宏引起的问题,我就不知道怎么解决.  随着项目的不断变大,头文件嵌套无法避免,手动控制头文件不嵌套,不现实.

user: user-7
content: 把公共的宏单独放在一个独立的头里面。

user: user-0
content: 我把我的问题用简单代码写出来了,大家帮我解决一下: 我定义了三个文件, 预编使用 gcc 3.c -E 编译使用 gcc 3.c -o a 由于项目在不断变大,嵌套问题该如何处理? // 1.h #ifndef _Q_H_ #define _Q_H_  #include "2.h"  void inline show(void) {     int a;      a += 2; } //void inline st(void); void inline add(void) {     int a;      a = PAGE_SIZE;     a += 3;     st(); }   #endif  // 2.h #ifndef _W_H_ #define _W_H_ #include "1.h"   #define PAGE_SIZE 3 void inline st(void) {     show(); }  #endif   // 3.c  #include "2.h"   int main() {     return 0; }

user: user-6
content: 自己更清关系，再不会参看一下标准库里各头文件怎么包含的

user: user-0
content: 我把我的问题用简单代码写出来了,大家帮我解决一下: 我定义了三个文件, 预编使用 gcc 3.h -E 编译使用 gcc 3.h -o a 由于项目在不断变大,嵌套问题该如何处理? // 1.h #ifndef _Q_H_ #define _Q_H_  #include "2.h"  void inline show(void) {     int a;      a += 2; } //void inline st(void); void inline add(void) {     int a;      a = PAGE_SIZE;     a += 3;     st(); }   #endif  // 2.h #ifndef _W_H_ #define _W_H_ #include "1.h"   #define PAGE_SIZE 3 void inline st(void) {     show(); }  #endif   // 3.c  #include "2.h"   int main() {     return 0; }

user: user-4
content: 楼主自己解套，这个总比股票解套容易。

user: user-3
content: 不要出现 a.h引用b.h b.h引用a.h