内置函数sizeof可以采用类型或表达式,并将返回适当的值。
我想构建一个使用_Generic()表达式来做类似事情的宏。特别是,我希望能够传递类型名称或值作为参数,就像sizeof.
作为一个简单的例子,我可以做这样的事情:
#define F(x) _Generic((x)+0, int: 1, long: 2)
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为(x)+0可以是算术表达式或类型转换。
但当类型为 时,这不起作用struct Foo。
我可以使用带有大括号的复合文字语法:(x){0}但这对于文字值失败:
是否有一些扭曲的 C 语法恐怖允许在 - 表达式中使用类型名称或表达式_Generic?
如果您将其与 结合起来,您的复合字面想法将会起作用typeof。但是,请注意,它typeof是 GCC C 语言扩展,因此它可能不适用于每个 C 编译器。
#include <stdio.h>
typedef struct Foo {
int mx;
} Foo;
#define F(x) _Generic((typeof(x)){0}, \
int: 1, \
long: 2, \
struct Foo: 3)
int main()
{
printf("%d\n", F(0)); // 1
printf("%d\n", F(int)); // 1
printf("%d\n", F((long)0)); // 2
printf("%d\n", F(long)); // 2
printf("%d\n", F((Foo){1})); // 3
printf("%d\n", F(Foo)); // 3
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |