我们可以在 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...#endif作用

宏调用中的 #ifdef 适用于 gcc,但不适用于 msvc

#ifdef#ifndef#else#endif执行条件编译

c语言define用法

vba修改INI中指定的项