gpt4 book ai didi

c++ - 是否可以判断 C++ 文件何时是主要源文件?

转载 作者:行者123 更新时间:2023-11-30 05:42:03 26 4
gpt4 key购买 nike

是否可以确定源文件是否由于 #include 而被预处理?语句与由于它是传递给编译器的主要源文件而被预处理?

基本上,我希望能够编写如下内容:

// foo.x:
#if COMPILING_FOO_MODULE
/* FOO code that's only visible when compiling foo.x module */
#endif
/* FOO code that's visible when compiling foo.x module or included in other modules */

// bar.cpp:
#include "foo.x"
...

预处理时foo.x ,我希望将这两段代码都传递给编译器,但是在预处理时 bar.cpp ,我只想使用第二部分:

// foo.x.preprocessed:
/* FOO code that's only visible when compiling foo.x module */
/* FOO code that's visible when compiling foo.x module or included in other modules */

// bar.cpp.preprocessed:
/* FOO code that's visible when compiling foo.x module or included in other modules */
...

我意识到我可以通过添加 #define COMPILING_FOO_MODULE 0 轻松完成此操作就在 #include 之前,但我的目标是避免需要除 #include 之外的任何其他代码要添加到 bar.cpp文件。

包括因为我认为两者的答案相同。

编辑:

需要说明的是,我知道有一个单独的 .h.cpp file 恰好解决了这个问题,并且在几乎所有情况下都是正确的做法。但由于种种原因,我只想要一个源文件,既可以用作主模块源文件,也可以用作其他模块的头文件。

最佳答案

有一种方法可以完全按照您的意愿行事。试试这个:

foo.c

#if __INCLUDE_LEVEL__ == 0
/* FOO code that's only visible when compiling foo.x module */
#endif
/* FOO code that's visible when compiling foo.x module or included in other modules */

酒吧.c

#include <foo.c>
//other lines of code

请注意宏__INCLUDE_LEVEL__ 是预定义的。它表示包含文件中的嵌套深度。

希望对您有所帮助。

来源:https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html

关于c++ - 是否可以判断 C++ 文件何时是主要源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com