相关疑难解决方法(0)

未定义的行为和序列点

什么是"序列点"?

未定义的行为和序列点之间的关系是什么?

我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?

如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq undefined-behavior sequence-points

970
推荐指数
4
解决办法
10万
查看次数

什么是C中的&&&操作

#include <stdio.h>

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%d\n", c);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面编译的程序的输出gcc

0
1
1
Run Code Online (Sandbox Code Playgroud)

使用-Wall-Waddress选项,gcc发出警告:

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]
Run Code Online (Sandbox Code Playgroud)

如何c在上述计划中进行评估?

c c++ operators gcc-warning compiler-optimization

195
推荐指数
2
解决办法
1万
查看次数

为什么c = a +++++ b在C中不起作用?

可能重复:
请帮我理解C中的错误a +++++ b

在今天的讨论中,出现了前/后增量的主题.

我们尝试了几种添加和增量组合:

c = a+++b //works
c = a++ + ++b //works
c = a+++ ++b //works
c = a+++++b // doesn't work, compiler error "error: invalid lvalue in increment
Run Code Online (Sandbox Code Playgroud)

区别在哪里?这个额外的空格究竟为解析器添加了什么,以便程序编译?

c

133
推荐指数
0
解决办法
4431
查看次数

为什么+++++ b不起作用?

int main ()
{
   int a = 5,b = 2;
   printf("%d",a+++++b);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码提供以下错误:

错误:需要左值作为递增操作数

但是,如果我把整个空间a++ +++b,然后正常工作.

int main ()
{
   int a = 5,b = 2;
   printf("%d",a++ + ++b);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

第一个例子中的错误是什么意思?

c lvalue

86
推荐指数
8
解决办法
8132
查看次数

操作c = a +++ b是什么意思?

以下代码让我感到困惑

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
Run Code Online (Sandbox Code Playgroud)

我预计输出为3,5,8,主要是因为a ++意味着2 + 1等于3,而3 + 5等于8,所以我预期3,5,8.事实证明结果是3,5,7.有人可以解释为什么会这样吗?

c c++ visual-c++

31
推荐指数
3
解决办法
3万
查看次数

如何解析表达式x --- y?这是一个法律表达吗?

如何x---y解析表达式?这是一个法律表达吗?

c++ syntax

5
推荐指数
1
解决办法
721
查看次数

为什么"a +++++ b"不能用gcc编译,但"a +++ b","a ++ + ++ b"和"a +++ ++ b"可以?

可能重复:
请帮我理解C中的错误a +++++ b

这是示例代码,为什么"a +++++ b"无法编译,但其他人可以?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int a = 0;
    int b = 0;
    int c = 0;
    c = a+++b;
    printf("a+++b is: %d\n", c);

    c = a = b = 0;
    c = a++ + ++b;
    printf("a++ + ++b is: %d\n", c);

    c = b = a = 0;
    c = a+++ ++b;
    printf("a+++ ++b is: %d\n", c);

    c = b = a = 0;
    c = a+++++b; …
Run Code Online (Sandbox Code Playgroud)

c gcc operators

5
推荐指数
3
解决办法
911
查看次数

C如何解析a = b --- c?

如果C必须编译以下代码

int a = 5, b = 3, c = 7;

a = b---c;
Run Code Online (Sandbox Code Playgroud)

难道要分析它a = b-- - ca = b - --c或者是不确定的行为?

c parsing operators token c-preprocessor

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

在Java中使用= +运算符?

我有以下代码:

public class Operators {
    public static void main(String[] args) {
        int i =+ 2;
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

执行后,我得到以下输出:2

那么=+运营商在这里做了什么呢?

编辑:

正如一些回答,这是分配+2i,考虑下面的代码:

public class Operators {
    public static void main(String[] args) {
        int i =- -2;
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在上面的例子中,输出应该是-2.但我得到了2

所以我想,它是-(-2),它给出了2.吗?

java operators

0
推荐指数
2
解决办法
9560
查看次数

递减运算符与减法运算符

如果我写一个像(在c中)的代码

    x=1;
    z=2;
    y=x---z;
Run Code Online (Sandbox Code Playgroud)

将前两个 - 作为后减量处理,后来作为减法处理

或者第一个 - 将被视为减法,其他两个将被视为预先减少

如果我放一个空格使其成为另一个(因为在c程序中不会被空格改变)该怎么办?

subtraction decrement

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