我的项目必须是 C++。我包括:
- glib-2.0
- gtk+-2.0
- 塔(C++)
- 基因组
My other question让我更进一步。
- 我可以做
#define
私有(private)以便没有其他源文件永远能够使用私有(private)定义 ?
回答:是的,在 C 或 cpp 文件中(虽然它们的 header 不公开那些定义)
我是否必须两次包含所有库(对于两个编译器:GCC C、GCC C++)? (我将在 cpp 文件中使用 C 库)。还有链接器?
我正在使用 `pkg-config --cflags --libs glib-2.0 gtk+-2.0` 来修复一些 fatal error “找不到文件”强>.但我仍然得到它们(例如 glibconfig.h ~ 找不到文件)。是否有万无一失的解决方案?
问题可能是如果我创建一个全局
#define null
或者什么,然后包含的库可能在我的项目中有相同的定义名称错误?
我一步一步地开始了这个项目,一次包括一个库,如果出现问题就解决问题。然后包含下一个库并修复问题等。我使用的是 eclipse,我包含了 guards 和混合的 c 和 cpp 源文件。
最佳答案
使预处理器宏“私有(private)”的唯一方法是在源文件中定义它们。然后它们将仅可用于该源文件。
您必须记住,预处理器(处理宏和 #include
指令)实际上是一个单独的步骤,在实际编译器看到源代码之前运行。
此外,当您使用 #define
定义宏时,它实际上并不是按照编译器和链接器的定义方式定义的。预处理器阶段运行后,生成的翻译单元中不再有宏名称。
您可能想阅读有关 translation units 的内容,并了解预处理器和编译器的工作原理。
关于你的第二点,你实际上并不是只使用 C++ 编译器构建你的项目两次。因此,在链接您的项目时,您应该只指定一次库。
使用例如pkg-config
以获取编译器和链接器标志。首先,在实际将源文件编译成目标文件时,您只需要编译器标志(--cflags
参数)。然后,在链接时,您只需要链接器标志(--libs
标志到 pkg-config
),生成的标志应该放在命令行的最后(因为链接器在依赖库的对象文件之后需要库。
关于c++ - 我可以将 C/C++ #defines 设为私有(private)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20116284/