int main(void)
{
int a=0, b=20;
char x=1, y=10;
if(a,b,x,y)
printf("bye");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上述代码中的"if"条件如何工作?"y"的值是否仅被"if"视为?
我在gcc中尝试了以下代码:
#include<stdio.h>
int main()
{
int a=3,2,1;//////////////////////ERROR!//////////////////////////
printf("%d", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它能成功编译为:
那么,整数变量a的值应该是1吗?还是3?
当我尝试执行此程序时,为什么会出现此错误?
错误:预期标识符或'('在数字常量之前
可能重复:
C++逗号运算符
这可能是一个微不足道的问题,但我不知道答案.这一直困扰着我今天下午.
我只是编写了一个将RVB转换为YUV的函数.没有什么特别的,但错误地使用逗号(,)代替我的数字中的点.
它编译但结果不是我的预期,例如"-3713796"而不是0-255范围编号.
(0,615*(double) 61) - (0,51498*(double) 61) - (0,10001*(double) 61)
Run Code Online (Sandbox Code Playgroud)
那是什么意思呢?
如果它不是编译错误,它可能对某些东西有用,但是什么?
Ps:我在Qt上使用C++.
我不是C++的新手,但这是我第一次看到以下代码:
int a=0;
int b=(a=2,a+1);
Run Code Online (Sandbox Code Playgroud)
那是C++代码.你能告诉我这里发生了什么吗?变量b如何得到值3?
我在Visual Studio 2012中使用C++(而不是C++/CLI).
我不明白为什么这段代码有效,我原本以为它会在编译时失败,但它在运行时甚至都不会失败:
double MyClass::MyMethod() const
{
//some code here
return (10, 20, 30, 40);
}
Run Code Online (Sandbox Code Playgroud)
我错误地制作了这段代码,不是故意的,我在运行单元测试时注意到了这个错误.我很惊讶它有效.当我运行它时,它返回40,列表中的最后一个数字.
有人能解释一下这种语法的含义及其工作原理吗?
我最近发现这是有效的C++语法:
int bar = 0;
for(int foo = 0; bar = 0, foo != 10; foo++)
{
//some code
}
Run Code Online (Sandbox Code Playgroud)
我之前从未见过用作两个条件分隔符的逗号,所以我查看它是如何工作的.
我发现在用逗号分隔条件列表时,所有条件都会被执行,但只有最后一个被用作条件.例如:
while(function1(), function2(), function3())
{
//code
}
Run Code Online (Sandbox Code Playgroud)
这里,每次循环都会运行function1,function2和function3.但是,只有function3的返回值将用于确定是否保持循环.
我的问题是: 在任何情况下,这是最好的事情吗?
对我来说,这更有意义:
while(function3())
{
function1();
function2();
//some code
}
Run Code Online (Sandbox Code Playgroud)
何时使用逗号分隔条件是否恰当?
此回复的注释指出,不应使用以下代码,因为它表现出未定义的行为:
int old = (std::cin >> old, old);
Run Code Online (Sandbox Code Playgroud)
类似的代码在这里也受到极大的嘲笑,尤其是对于表现出未定义的行为。
另一方面,这个极受好评的答复建议使用以下代码作为逗号运算符的有用性示例:
while (cin >> str, str != "STOP") {
//process str
}
Run Code Online (Sandbox Code Playgroud)
我假设如果此代码表现出未定义的行为,则不会被投票。
问题:如果第一个代码是未定义的行为(大概是由于使用了读取结果cin而不检查后者的状态),那么第二个代码为什么没问题?
编辑:第一个示例的评论部分中回答了该问题。第二个示例未显示的是它str的一个实例,std::string因此已初始化。因此,没有未定义的行为。
我正在学习C并且作为练习,我正在尝试编写一个没有任何分号的简单程序.我在替换return 0语句方面遇到了一些麻烦,但我发现这是(唯一的)方法在C:中做到这一点if(exit(0),0){}.
这个陈述究竟是如何运作的?
我知道,exit()从stdlib一个void函数,但我不明白是什么,0在部分if作品(其余的我很清楚).
if如果它只是被忽略,那么在一个陈述中第一个论点的重要性是什么?例如,在:
#include<stdio.h>
main()
{
if(1,0)
printf("abc");
else
printf("qwe");
}
Run Code Online (Sandbox Code Playgroud) 我在TI的示例代码中看到以下切换情况,我想知道switch参数接收的第二个变量的含义是什么,
__interrupt void Timer_A(void)
{
switch (TAIV, 10) // Efficient switch-implementation
{
case 2: break; // TACCR1 not used
case 4: break; // TACCR2 not used
case 10: P1OUT ^= 0x01; // overflow
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是首先检查案例值"10"是否优先,但我不确定.
c ×5
c++ ×5
if-statement ×2
comma ×1
conditional ×1
embedded ×1
exit ×1
gcc ×1
loops ×1
numbers ×1