我们可以在 INI 文件中使用 #ifdef 宏,或者我们如何限制 INI 文件中写入的设置的编译?
Posted
技术标签:
【中文标题】我们可以在 INI 文件中使用 #ifdef 宏,或者我们如何限制 INI 文件中写入的设置的编译?【英文标题】:Can we use #ifdef macros in INI file, Or how can we restrict compilation of setting written in INI file? 【发布时间】:2019-09-24 00:16:24 【问题描述】:您好,我有一个代码,它使用少量 INI 文件进行预定义设置。 我可以在 INI 文件中使用#ifdef,如果可以,我该如何使用它? 如果否,如何限制 INI 文件的代码编译。 例如 我有一个宏-“FLAG_A” 我有如下INI文件
setting.ini
Volume = 10
Brightness = 30
A_Variable = 0
我想像这样使用它
#ifdef FLAG_A
Volume = 5
#endif
Brightness = 30
A_Variable = 0
【问题讨论】:
您是在问是否可以在非 C++ 代码中使用 C++ 预处理器?如果是这样,***.com/questions/18473036/… 可能会有所帮助。 不,你不能。但是,如果您愿意,可以使用宏从代码中加载不同的 ini 文件。 可能您可以在加载时通过 c++ 预处理器通过管道传输 ini 文件。但是你必须弄清楚如何在你的环境中做到这一点。 Serge,你能举个例子让我明白吗? 【参考方案1】:C++ 编译器通常不编译 Ini 文件。相反,C++ 编译器编译 C++ 源文件。事实上,ini 文件通常根本不被编译,因为 ini 文件不是编译语言。
C(本质上与 C++ 相同)预处理器不用于其他宏处理,而不是用于语言目的。一些编译器确实允许您在不编译的情况下单独调用预处理器。一个例子:
gcc -E file.ini
但由于目的是为了编译,除了用相应的输出处理和替换您的指令外,还会为编译器添加实现定义的指令。如果您的 ini 处理器支持 #
字符作为注释,那么这些指令将方便地解释为 cmets。否则,这可能对您不可用。
不管怎样,除了 C 预处理器使用的之外,还有其他独立的宏语言和模板处理器。我建议你使用其中之一。
【讨论】:
以上是关于我们可以在 INI 文件中使用 #ifdef 宏,或者我们如何限制 INI 文件中写入的设置的编译?的主要内容,如果未能解决你的问题,请参考以下文章
预处理三剑客(宏定义,文件包含和条件编译)之第三种——条件编译。 #ifndef #ifdef
宏调用中的 #ifdef 适用于 gcc,但不适用于 msvc