![]() |
1
13
这个 Boost Preprocessor (它既适用于C,也适用于C++,即使Boost作为一个C++库)库也能帮助完成这类任务。它不在宏中使用#ifdef(这是不允许的),而是帮助您多次包含文件,每次定义不同的宏,以便文件可以使用#ifdef。 下面的代码如果保存到max.c,应该可以为文件顶部的MAXES#define中列出的每个单词执行所需的操作。但是,如果任何_MAX值都是浮点值,则它将不起作用,因为预处理器无法处理浮点值。
|
![]() |
2
6
我以前试过。问题是
|
![]() |
3
4
我唯一的解决办法就是作弊——生成一个类型列表,其中有一个_XXX_MAX作为一组定义,然后使用它。我不知道如何在预处理器中自动生成列表,所以我不尝试。假设列表不会太长,维护也不会太密集。
|
![]() |
4
0
我不认为在ifdef中不允许使用###运算符。我试过这个:
|
![]() |
5
0
与模板不同,预处理器不是
turing-complete
. 一
|
![]() |
6
0
没有简单的方法可以做到这一点。最接近的方法是#定义大量IFDEF宏,例如:
将所有这些文件都粘贴到它们自己的头文件“ifdefs.h”中是有意义的,您可以在需要时将其包括在内。您甚至可以编写一个脚本,从 然后,您的代码变成
|
![]() |
7
0
只要您只对整数值感兴趣,并且假设硬件使用2的补码和8位字节:
|
![]() |
Timo · 如果宏变量后跟构成有效标识符的字符,则不会展开宏变量 7 年前 |
![]() |
user3623498 · 在#if中更改变量时出现问题 7 年前 |
![]() |
einpoklum · 来自#cmakedefine替换的意外结果 7 年前 |
![]() |
Joseph Franciscus · C中预处理器方法的别名++ 7 年前 |
![]() |
stoper · 防止同一宏在多个转换单元中具有不同的定义 7 年前 |
![]() |
СеÑгей · MinGW中预处理器g++的奇怪行为 7 年前 |