Tag: 表达

带有if语句的布尔表达式中的问题

我需要一些确认。 我总是得到正确的o / p但是有人告诉我,下面的表达方式是行不通的 提前致谢。 #define a 11 #define b 12 #define c 13 // I want if array[i] has values of any of these then do something if( array[i] == (a) ||(b) ||( c)) // some function else printf(“no match”);

在C中,为什么在单独的语句中定义全局变量会引发警告,但是对于局部变量是否可以?

在下面的代码中,为什么全局变量“x”的定义显示警告“数据定义没有类型或存储类”,但同样的事情适用于局部变量“y”?我正在为每个变量做什么首先在一个语句中声明它们,然后在另一个语句中定义它们。它对一个语句有效但是对另一个语句显示警告的区别是什么? #include int x; x=303; int main(void) { int y; y=776 ; printf(“The value of x is %d,and of y is %d”,x,y); }

sizeof C中的整数表达式

用Xcode编译C(gnu11)让我半惊喜 #include int main(int argc,char**argv) { short s = 1; printf( “%zd %zd %zd\n”, sizeof(s), sizeof(s*s), sizeof(s?s:s)); return 0; } 产生输出 2 4 4 我在期待 2 2 2 或者可能 2 4 2 为什么是这样?

C11表达式中的赋值运算符排序

介绍 C11标准(ISO / IEC 9899:2011)在表达式中引入了新的副作用测序定义( 参见相关问题 )。 序列点概念已经在关系之前进行了序列补充,并且在关系之后 进行了 排序,这些关系现在是所有定义的基础。 第6.5节“表达式”,第2点说: 如果对标量对象的副作用相对于对同一标量对象的不同副作用或使用相同标量对象的值进行的值计算未进行排序,则行为未定义。 如果表达式的子表达式有多个允许的排序,则如果在任何排序中发生这种未测序的副作用,则行为是不确定的。 稍后,第6.5.16节“分配操作员”,第3点指出: 在左右操作数的值计算之后,对更新左操作数的存储值的副作用进行排序。 对操作数的评估是不确定的。 问题 第一个引用的段落(6.5 / 2)由两个例子支持(与C99标准相同): 第一个例子 a[i++] = i; //! undefined a[i] = i; // allowed 这可以通过定义轻松解释: 如果相对于使用相同标量对象的值的(…)值计算,对标量对象的副作用未被排序,则行为未定义。 (6.5 / 2), 对操作数的评估是不确定的。 [在任务内](6.5.16 / 3)。 因此, i++ (LHS)的副作用与i (RHS)无关,这给出了未定义的行为。 第二个例子 i = ++i + 1; //! undefined i = i […]