相关疑难解决方法(0)

int a = 1,b = a ++; 调用未定义的行为?

是否int a=1, b=a++;调用未定义的行为?在初始化器中初始化a及其访问和修改之间没有序列点介入b,但据我所知,初始化不是对象的"修改"; 指定初始值设定项以提供对象的"初始值".根据6.7.8初始化,第8段:

初始值设定项指定存储在对象中的初始值.

在对对象进行任何访问之前,将"initial"作为顺序进行似乎是合理的.此问题是否已经考虑过,是否有可接受的解释?

c undefined-behavior sequence-points language-lawyer

18
推荐指数
1
解决办法
982
查看次数

为什么逗号运算符似乎不在我的代码中的"if"语句和"else"语句之间工作?

我知道如下的语句(逗号代替分号)看起来很奇怪:

 if(a<b)printf("Hello\n"),a+=5,b/=5,printf("%d,%d",a,b);
Run Code Online (Sandbox Code Playgroud)

但它完全正常,我读过它是因为comma这里作为一个序列点.我可以理解这一点.但我只是不明白为什么以下失败然后我也使用了一个else:

  if(a<b)printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b);
Run Code Online (Sandbox Code Playgroud)

它给出了错误expected expression before 'else'.

为什么第二个语句会出错?在第一个语句中,我们看到它comma作为一个序列点.那么为什么它之前没有这样做else?第二个导致错误的情况有什么特别之处?这是我的完整程序:

#include<stdio.h>

int main(void)
{
    int a=30,b=45;

    //if(a<b)printf("Hello\n"),a+=5,b/=5,printf("%d,%d",a,b); //Works well
    if(a<b)printf("Hi\n"),else printf("Bye\n"),a+=5,b/=5,printf("%d,%d",a,b); 

}
Run Code Online (Sandbox Code Playgroud)

c if-statement comma sequence-points

0
推荐指数
1
解决办法
270
查看次数