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

我想知道C是否允许设置选择性
#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启用