Tag: 条件运算符

转到不使用?:C中的运算符

出于学习目的,我编写了以下代码片段: for(int i=0;i<10;i++) { for(int j = 0;j<5;j++) { //(i==j && i==3)? (goto found) : printf("stya here\n"); if(i==j && i==3){goto found;} else {printf("stay here\n");} } } found: printf("yes I am here"); 但我想知道我什么时候发现内部循环中的省略语句没有给出错误,现在我很困惑if-else并不总是可以用?:运算符替换。 这是什么事实? 为什么评论语句会出错?

三元运算符和赋值运算符

in C / C ++三元运算符实际上是否具有与赋值运算符相同的优先级? Luchian Grigore的回答说案件就像 a ? b : c = d 将永远推断为 a ? b : ( c = d ) 因为=和?:从右到左关联 在c ++中 k = 21 > 3 ? j = 12 : j = 10; 和 k = 1 > 3 ? j = 12 : j = 10; 两者都很好。 […]

常量表达式中的条件运算符

我尝试使用MSVC 10的以下代码片段,它可以正常工作。 enum { FOO = (sizeof(void*) == 8 ? 10 : 20) }; int main() { return FOO; } 我想知道的是:当所有操作数都是常量表达式时,C ++标准(最好是C ++ 98)是否允许我在常量表达式中使用条件运算符,或者这是Microsoft的怪癖/扩展?

条件运算符中的“错误:左值作为赋值的左操作数”

我是C的新手,今天我学会了“?” 运算符,它是if-else语句的简短类型。 但是,当我执行此代码时: int b; int x; b=3<2?x=12:x=34; 我收到错误“错误:左值作为赋值的左操作数需要左值”。 我不明白为什么会这样。 我想到的过程是程序首先将34分配给x,然后将x的值(即34)分配给b。 另一方面,我可以使用该语句作为 int b; int x; b=3<2?x=12:(x=34); 没有任何错误。 我查看了我的书,但没有任何帮助。 为什么我不能使用第一个语句? 我的电脑试图做什么? 谢谢…

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

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

具有常量(true)值的条件运算符?

我正在查看OpenSSL中使用的一些预处理器宏,我从crypto/stack/safestack.h看到了以下crypto/stack/safestack.h : #define CHECKED_STACK_OF(type, p) \ ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) #define CHECKED_SK_FREE_FUNC(type, p) \ ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) #define CHECKED_SK_FREE_FUNC2(type, p) \ ((void (*)(void *)) ((1 ? p : (void (*)(type))0))) 我猜它的编写方式可以解决编译器错误(可能是供应商十多年来一直没有支持的古老版本)。 使用上述1的目的是什么,因为它总是如此?

这段代码做了什么以及使用的每个符号是什么意思? 使用的语言是C,我只是编码的初学者

遇到了一些我无法理解这两行正在做什么的代码。 甚至无法获得语法。 请指定使用了哪种类型的function,例如我猜测第一行中已经使用了条件运算符。 unsigned long long base_size = b >= 2 ? (b-2)/2:0; printf(“%llu\n”,(base_size*(base_size+1))/2);

如果变量为NULL,则有条件地设置变量

当单步执行sqlite3_stmt ,我想检查NULL的返回值而不是存储它并检查存储的值。 这就是我现在正在做的事情: char *email = (char *)sqlite3_column_text(statement, 10); if (email == NULL) email = “”; 这是我想要做的事情,减去对column的双重调用: char *email = ((char *)sqlite3_column_text(statement, 10)) ? (char *)sqlite3_column_text(statement, 10) : “”; 有没有办法更简洁地表达第二个表达式? 我必须重复做很多这样的事情,所以我正在寻求简洁。 我知道这是一个控制流的问题,而不是SQLite API本身的问题,但你有它。 我想不出这样做的好方法。

条件运算符中的赋值有什么问题?

有一个错误。 在以下代码中为[i]赋值是不对的? 或条件运算符出了什么问题? #include #include int main(){ char a[12]=”sumit tyagi”; int i=0; while(a[i]!=’\0′){ a[i]>90 ? a[i]=a[i]-32 : a[i]=a[i]+32; //error in this line i++; } printf(“\n %s”,a);

具有条件(三元)表达式的运算符’sizeof’

当给出三元表达式时,我很难理解sizeof的行为。 #define STRING “a string” int main(int argc, char** argv) { int a = sizeof(argc > 1 ? STRING : “”); int b = sizeof(STRING); int c = sizeof(“”); printf(“%d\n” “%d\n” “%d\n”, a, b, c); return 0; } 在这个例子中(用gcc 4.4.3和4.7.2测试,用-std=c99编译),b是9(8个字符+隐式’\0′ ),c是1(隐式’\0′ )。 a,出于某种原因,是4 。 根据argc是否大于1,我希望a为9或1.我想也许字符串文字在传递给sizeof之前转换为指针,导致sizeof(char*)为4。 我尝试用char数组替换STRING和”” … char x[] = “”; char y[] = “a […]