“当使用gcc时,”空值不应被忽略“

时间:2016-01-19 13:48:10

标签: c gcc

这是我在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);
};

2 个答案:

答案 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;

或者,因为这两个值只是truefalse

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