C选择性#定义
我想知道C是否允许设置选择性C选择性#定义,c,c-preprocessor,C,C Preprocessor,我想知道C是否允许设置选择性#define。 以下是我所说的选择性: 如果我定义了一个结构: typedef struct mystruct{ int(*指针函数)(struct mystruct*,struct mystruct); ... }我的结构; //我有: int main(){ mystruct s1,s2; //当我这样做时: s1=s2; //我想让我的#define在左边认识到这一点 //我有mystruct类型并使用s1.pointer_函数(&s1,s2); } defi
#define
。
以下是我所说的选择性:
如果我定义了一个结构:
typedef struct mystruct{
int(*指针函数)(struct mystruct*,struct mystruct);
...
}我的结构;
//我有:
int main(){
mystruct s1,s2;
//当我这样做时:
s1=s2;
//我想让我的#define在左边认识到这一点
//我有mystruct类型并使用s1.pointer_函数(&s1,s2);
}
define执行简单的字符串替换。它不依赖于上下文。你不能这样做。我甚至不确定你要定义哪个符号,s1
或s2
。这并不重要,在这两种情况下,您都需要替换其中一个名称,这样它就不起作用了。您可以在C11中使用\u Generic
语法执行此操作
#define MY_MACRO(x, y) _Generic((x), \
mystruct: (x).pointer_function(&(x), (y)), \
)
在C99或C89中不能执行此操作。我还不知道有哪种编译器支持C11,所以这段代码一两年内都不会编译。从GCC文档()中:
GCC对本标准的部分具有有限的不完整支持,通过-std=c11或-std=iso9899:2011启用