int main()
{
switch(1,2)
{
case 1:printf("1");break;
case 2:printf("2");break;
default: printf("error");break;
}
}
Run Code Online (Sandbox Code Playgroud)
这在c中有效吗?
我认为它不应该,但是当我编译它时,它显示没有错误并产生输出2.
int c = someIntegerValue;
// Some code...
int i;
for ( i = 0; i < 5, i < c; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)
我的编译器说error: expression has no effect,这听起来是正确的.那么,这两个比较中的哪一个将在这里使用?我的猜测是i < c被忽略了,但我想得到其他人的一些确认,因为我还无法运行这段代码......
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"视为?
来自高级OOP语言C#和Java,最近开始在C中摸不着头脑.我觉得C有点奇怪,就像有人觉得JS一样.所以想澄清如下:
下面给出了错误,这看起来很直观,因为即使在OOP语言中它看起来也是不正确的语法
int i=0,1,2;
/*
Error : expected identifier or ‘(’ before numeric constant
int i = 0, 1, 2;
^
*/
Run Code Online (Sandbox Code Playgroud)
但是下面的工作令人惊讶:
int i;
i = 0,1,2; //works
Run Code Online (Sandbox Code Playgroud)
为什么会这样?保持这种行为或仅仅是一些解析技术问题是否有意义?
我已经使用SO一段时间作为参考,但之前从未问过问题.我目前正在大学C++课程中阅读Bjarne Stroutstrup 编程:原理和实践,仅仅是为了我自己的利益,因为我在这里看到了一个真正推荐它的问题的答案.
我们现在正在课堂上覆盖操作员,而我似乎无法理解逗号操作符在语句中的工作方式.一个例子是类的在线部分的示例问题,即使我编写C程序并使用GDB获取结果,我仍然会出错.问题是:
假设在下面的表达式之前x == 16,下面的表达式的值是什么(不一定是x的值)?
x ++,++ x,x + = x
我对正确答案不感兴趣,以至于如何得到正确的答案.我已经阅读了类似问题的几个答案,例如这里的问题,但似乎我错过了当实际上没有分配运算符时这是如何适用的.这跟说的一样吗
int y = (x++, ++x, x+=x);
Run Code Online (Sandbox Code Playgroud)
要么
int y = x++, ++x, x+=x;
Run Code Online (Sandbox Code Playgroud)
还是两个?有人可以解释逗号运算符的工作原理,特别是与没有赋值的语句有关吗?
在完成C编程测试时,我得到了一个关于函数的预期输出的问题,该函数似乎返回两个值.其结构如下:
int multi_return_args(void)
{
return (44,66);
}
Run Code Online (Sandbox Code Playgroud)
这个问题让我感到惊讶并且固有地认为如果可能的话,第一个参数将被传递给调用者.
但在编译之后,结果是66.在快速搜索之后,我找不到任何关于构造这样的return语句的内容,所以想知道是否有些人可以帮助我.
为什么它会像这样,为什么?
我理解这个C++函数的作用,但我不明白为什么return语句是这样编写的:
int intDivide(int num, int denom){
return assert(denom!=0), num/denom;
}
Run Code Online (Sandbox Code Playgroud)
这里只有一个声明,因为只有一个声明,;但逗号让我困惑.为什么不写:
int intDivide(int num, int denom){
assert(denom!=0);
return num/denom;
}
Run Code Online (Sandbox Code Playgroud)
除了"优雅"之外,还有什么东西可以在第一个版本中获得?
无论如何,这个逗号究竟在做什么?它是否将单个陈述分为两部分,以致上述两个版本基本相同?
我有以下python代码:
a, b = 1, 1
for i in range(0, 100):
print a
a, b = b, a + b
Run Code Online (Sandbox Code Playgroud)
它产生了这个:1 1 2 3 5 8等
我在c中写了同样的文章:
#include <stdio.h>
long long unsigned int a = 1, b = 1;
void main(){
for(int i = 0; i < 100; i++){
printf("%llu \n", a);
a = b, b = a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
它产生了这个:1 1 2 4 8 16 32等
为什么c程序在使用完全相同的操作时会产生2的幂?
#include<stdio.h>
#define POOLNAME_FMT "Hello"
void main() {
printf((POOLNAME_FMT "Cannot allocate %d bytes" POOLNAME_FMT "in pool not enough memory",5));
}
Run Code Online (Sandbox Code Playgroud)
当我使用双括号时,为什么会出现分段错误printf.即printf(( ));?
代码段是:
int main()
{
int a = 1, b = 2, c = 3;
printf("%d", a += (a += 3, 5, a));
}
Run Code Online (Sandbox Code Playgroud)
虽然它在终端中显示8作为输出.但我没有得到它背后的概念.