-1

我想知道C是否允许设置选择性#define. 这就是我所说的选择性:如果我定义了一个结构:

typedef struct mystruct{  
int (*pointer_function)(struct mystruct* ,struct mystruct);
...
} mystruct;

// and I have:
int main () {
mystruct s1, s2;
// when I do:
s1 = s2;
// I want my #define to recognize that on the left side
// I have mystruct type and use s1.pointer_function(&s1,s2);
}
4

3 回答 3

0

#define 执行简单的字符串替换。它不依赖于上下文。你不能这样做。

于 2012-05-04T21:56:20.653 回答
0

我什至不确定您要定义哪个符号,s1或者s2. 这并不重要,在任何一种情况下,您都需要替换其中一个您需要的名称,这样它就不起作用了。

于 2012-05-04T21:58:11.850 回答
0

_Generic您可以使用语法在 C11 中执行此操作。

#define MY_MACRO(x, y) _Generic((x), \
    mystruct: (x).pointer_function(&(x), (y)), \
    )

您不能在 C99 或 C89 中执行此操作。我还不知道任何具有良好 C11 支持的编译器,所以这段代码还不会编译一两年。来自 GCC 文档(来源):

GCC 对该标准的某些部分提供了有限的不完全支持,通过 -std=c11 或 -std=iso9899:2011 启用。

于 2012-05-04T22:05:18.047 回答