这是我在gcc c99中的代码,我的代码中有“void value”吗?
int main(int argc, char **argv) {
char *s = "smth";
int r2 = ({ if (__builtin_types_compatible_p(__typeof__(s), char*)) { true; } else { false; }});
return (0);
};
更新
更糟糕的是,以下代码具有相同的错误
int main(int argc, char **argv) {
char *s = "smth";
int r2 = ({if (1) {1;} else {0;}});
return (0);
};
答案 0 :(得分:2)
您正在尝试将if
语句分配给int
。该陈述没有类型,因此您会看到错误。
您想要的是ternary operator:
condition ? true_value : false_valse
如果condition
的计算结果为true,则表达式的值为true_value
,否则其值为false_value
。
所以你想要的是这个:
int r2 = (__builtin_types_compatible_p(__typeof__(s), char*)) ? true : false;
或者,因为这两个值只是true
和false
:
int r2 = __builtin_types_compatible_p(__typeof__(s), char*);
答案 1 :(得分:1)
声明
if (condition) {statement}
将返回void
,您无法用于初始化/分配变量。最好使用三元运算符?:
int r2 = __builtin_types_compatible_p(__typeof__(s), char*) ? true : false
或更好
bool r2 = __builtin_types_compatible_p(__typeof__(s), char*) // Use stdbool.h
因为__builtin_types_compatible_p
如果给定的类型相同则返回1
,否则返回0
。