我无法完成以下操作,因为在预处理器中空格被忽略(?)。我知道这是标准的一部分,但我想知道是否有一个工作使用可变参数或一些间接的宏技巧。
变量:
#define DECL_INT(name) int #name
DECLR_INT(myValue);
// Expected: int myValue;
// Actual: intmyValue;
结构:
#define ADD_CUSTOM_MEMBERS() \
C_MEM(IntMember, int) \
C_MEM(CharMember, char)
#define C_MEM(name, type) type #name;
typedef struct {
int Stuff;
ADD_CUSTOM_MEMBERS()
// Expected: int IntMember;
// char CharMember;
} my_struct_t;
我们的目标是拥有一个泛型结构,这样每个应用程序都可以向其中添加自己的成员。
有很多关于空格和宏的信息,但是我还没有看到任何人直接解决这个问题,我已经看到了很多添加前缀的例子。
#define DECL_INT(name) int myPrefix_#name
DECLR_INT(myValue);
// Actual: int myPrefix_myValue;
这样做可以保留int
和myValue
之间的空格,但我不需要前缀。
假设添加前缀是实现这一点的唯一方法,我不能使用这个技巧来声明一个类型为宏参数之一的变量。
1条答案
按热度按时间icnyk63a1#
您有一个错误
#
。如果没有它:gcc -E
的输出: