相关疑难解决方法(0)

为什么这些构造使用前后增量未定义的行为?

#include <stdio.h>

int main(void)
{
   int i = 0;
   i = i++ + ++i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i++);
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u++ + ++u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u++);
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v++ + ++v;
   printf("%d\n", v); // 3 (Should be the …
Run Code Online (Sandbox Code Playgroud)

c increment operator-precedence undefined-behavior sequence-points

793
推荐指数
13
解决办法
7万
查看次数

表达式"j = ++(i | i);和j = ++(i&i);应该是左值误差?

我期待以下代码:

#include<stdio.h> 
int main(){
    int i = 10; 
    int j = 10;

    j = ++(i | i);
    printf("%d %d\n", j, i);

    j = ++(i & i);
    printf("%d %d\n", j, i);

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

表情j = ++(i | i);j = ++(i & i);会产生错误,左值如下:

x.c: In function ‘main’:
x.c:6: error: lvalue required as increment operand
x.c:9: error: lvalue required as increment operand   
Run Code Online (Sandbox Code Playgroud)

但我惊讶于上面的代码编译成功,如下所示:

~$ gcc x.c -Wall
~$ ./a.out 
11 11
12 12   
Run Code Online (Sandbox Code Playgroud)

检查上面的代码是否正常工作. …

c optimization gcc pre-increment gcc4.4

44
推荐指数
4
解决办法
3696
查看次数

为什么我不能用C-like语言做++ i ++?

半开玩笑地半开玩笑:为什么我不能++i++用C语言,特别是在C#中?

我希望它增加值,在我的表达式中使用它,然后再次递增.

c c# pre-increment post-increment

27
推荐指数
5
解决办法
5167
查看次数

preincremented variable(++ i)++的post incement错误?

在下面的代码段中,我希望答案为5,但它显示编译时错误:

#include <stdio.h>
int main()
{
    int i = 4;
    printf("%d", (++i)++);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是什么原因?.这里++i返回一个l值,所以我们可以增加它吗?

c

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

foo((&i)++)在C中给出了编译错误

在下面的例子中,我希望foo((&i)++)将计算为foo(4 +地址为(i)),假设int size是4 Byte但是它在此行给出了编译错误

有人有解释吗?

void foo(int*);
int main()
{
    int i = 10;
    foo((&i)++);
}
void foo(int *p)
{
    printf("%d\n", *p);
}
Run Code Online (Sandbox Code Playgroud)

c

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