C _Generic 错误 - '_Bool' 之前的预期表达式

C _Generic error - expected expression before '_Bool'

我正在学习 C _Generic。 这是问题: 为什么我无法成功编译下面的代码? 它只会将错误作为标题发出。

#include <stdio.h>
#define EVALUATE(X) _Generic((X), _Bool : "boolean", default : "not boolean")

int main(void)
{
    printf("%s\n", EVALUATE(5));

    return 0;
}

您的编译器似乎不支持 _Bool 类型。您可以通过声明类型 _Bool 的变量来检查这一点。例如

_Bool b = 1;

printf( "%d\n", b );

至于通用然后将 _Bool 替换为 int

如果在这样的替换后代码无法编译,则说明编译器不支持泛型。:)

_Generic 在 gcc until 4.9.0 中不受支持。 _Bool 在您当前的编译器中受支持,但由于编译器认为 _Generic 是常规隐式函数,因此它会发出有关奇数参数的警告。

海湾合作委员会 4.7.1

[9:25am][wlynch@apple /tmp] /opt/gcc/4.7.1/bin/gcc -std=c11 foo.c
foo.c: In function ‘main’:
foo.c:7:5: warning: implicit declaration of function ‘_Generic’ [-Wimplicit-function-declaration]
foo.c:7:20: error: expected expression before ‘_Bool’

海湾合作委员会 4.8.2

[9:26am][wlynch@apple /tmp] /opt/gcc/4.8.2/bin/gcc -std=c11 foo.c
foo.c: In function ‘main’:
foo.c:7:5: warning: implicit declaration of function ‘_Generic’ [-Wimplicit-function-declaration]
     printf("%s\n", EVALUATE(5));
     ^
foo.c:3:35: error: expected expression before ‘_Bool’
 #define EVALUATE(X) _Generic((X), _Bool : "boolean", default : "not boolean")
                                   ^
foo.c:7:20: note: in expansion of macro ‘EVALUATE’
     printf("%s\n", EVALUATE(5));
                    ^

海湾合作委员会 4.9.0

[9:26am][wlynch@apple /tmp] /opt/gcc/4.9.0/bin/gcc -std=c11 foo.c
[9:27am][wlynch@apple /tmp] ./a.out 
not boolean