Tag: 三元运算符

在表达式中使用括号,包括三元运算符

可能重复: 错误:这个简单的C代码需要左值? (三元有任务吗?) 在下面的代码中,我得到了一个错误,例如“ lvalue required as left operand of assignment ”。 我无法理解为什么会报告这样的错误。 但是当我在表达式中使用括号如(i>j)?(k=i):(k=j)它没有报告错误。 请解释。 int main() { int i = 2; int j = 9; int k; (i>j) ? k=i : k=j; printf(“%d\n”,k); return 0; }

为什么GCC的三元扩展不支持分配?

GCC有一个令人敬畏的三元表达式扩展到C ,它允许我们创建这样的语句: int x = some_var ?: 10; // expands to some_var ? some_var : 10 这真的很好,虽然它不是特别直观,但确实有效。 C语言中的大多数二元运算符都有一个与之关联的附加运算符,允许赋值: x = x + 2; // instead, we can say x += 2; 由于这种情况,以及大多数二进制C运算符( + , – , * , / , % , | , & , ^ )的范数,为什么不是三元扩展运算符的情况: int x = …; x ?:= 2; […]

我可以在C中使用GCC的__builtin_expect()和三元运算符

GCC手册仅显示了__builtin_expect()放置在’if’语句的整个条件周围的示例。 我还注意到GCC不会抱怨如果我使用它,例如,使用三元运算符,或任何任意积分表达式,即使是未在分支上下文中使用的表达式。 所以,我想知道其实际使用的基本限制是什么。 当它在这样的三元运算中使用时是否会保持其效果: int foo(int i) { return __builtin_expect(i == 7, 1) ? 100 : 200; } 那么这个案子呢: int foo(int i) { return __builtin_expect(i, 7) == 7 ? 100 : 200; } 还有这个: int foo(int i) { int j = __builtin_expect(i, 7); return j == 7 ? 100 : 200; }

C与C ++中的三元运算符

C和C ++之间存在很多差异并且卡在其中一个上相同的代码在C中产生错误而在C ++中执行正常请解释原因 int main(void) { int a=10,b; a>=5?b=100:b=200; } 上面的代码在C中给出了一个错误,说明了所需的左值 ,而相同的代码在C ++中编译得很好

条件表达式中的指针/整数类型不匹配

gcc 4.7.2 c89 你好, 我收到以下警告: pointer/integer type mismatch in conditional expression 我正在使用以下CFLAGS -Wall -Wextra编译 fprintf(stderr, “‘Failed to open file’ Error [ %s ]\n”, (errno == 0) ? “None” : strerror(errno)); 该程序运行正常,但我看不到警告的全部内容。 “None”和strerror(errno)都返回一个字符串而不是Integer值。 我正在将errno数字与零进行比较。 非常感谢任何建议,

如果声明? 并且:

我听说过哪种if语句使用? 并且:在C中 我不知道如何使用它,我无法找到任何关于它。 我需要使用它来缩短我的代码,任何帮助将不胜感激。

这个GNU扩展在三元运算上有多广泛?

根据维基百科,这是三元运算的GNU扩展。 iMyVal = –iVal ?: iDft; 虽然我完全知道这是一个GNU扩展,但有时候这些特殊语法可能会非常方便。 那么,是否有人知道这种语法是否仅在gcc可用? 或者他们是否支持它的其他任何编译器? 对于任何有兴趣的人,PHP从5.3开始支持这种语法 提前致谢。