相关疑难解决方法(0)

这是C中未定义的行为吗?

我在gcc上运行我的C代码来理解前/后增量运算符.然而,我看到的结果并不是我所期望的.就像第6行一样,因为我是5,它应该是

8 7 6 5 5
Run Code Online (Sandbox Code Playgroud)

但它是 8 7 6 5 8

然后显示最后一行14 14 14 14.有人可以解释一下这种行为.我曾预料到 14 14 13 12

这个编译器是否依赖?是否序列点上的printf函数的beahviour未定义?

#include <stdio.h>

int main()
{
        i = 5;
        printf("%d %d %d %d %d \n", i, i++, i++, i++, i);
        printf("%d \n", ++i);
        printf("%d \n", ++i);
        printf("%d \n", ++i);
        printf("%d %d %d %d \n", i, ++i, ++i, ++i);

}
Run Code Online (Sandbox Code Playgroud)

c pre-increment post-increment

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

如何输出到代码9?

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

为什么i在每个测试用例中比较后完成增量?

c while-loop

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

'x + = x--'后的x是多少?

在执行下面的代码后发生了什么?

int x = 10;
x += x--;
Run Code Online (Sandbox Code Playgroud)

我期待结果19(将x添加到x然后将x减1)但结果为20.它如何在窗帘后面工作?谢谢你的回答.

c++ operators post-increment

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

使用条件

先生,请你告诉我为什么" C "中的以下条件是false

main()
{
    int i=1;
    if(i<=i++)
        printf("false");
    else
        printf("true");
}
Run Code Online (Sandbox Code Playgroud)

c

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

是否定义了C中未定义行为的副作用?

与此问题相关的C代码:

#include <stdio.h>

int main(int argc, char **argv)
{
    int k = 0;
    double b = k++ + ++k + k--;
    printf("%d", k);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

存储的值b是未定义的,但是怎么样k

我发现这个的地方:

http://www.sanfoundry.com/online-c-test-precedence-order-evaluation/ Question#10

- 编辑 -

到目前为止我发现:存储的值b没有在任何地方使用,所以如果存储的东西b是唯一的UB,这个程序将不依赖于UB.

但我也在C99 6.5.2中找到了这一部分:

"在前一个和下一个序列点之间,一个对象的存储值最多只能通过表达式的评估来修改一次."

并列在J.2下.未定义的行为:

"行为未定义......'''应'或''不得''出现在约束之外的要求被违反"

但实际问题尚未得到解答.

- 编辑#2 -

并不是说我想写一个,而是根据标准的'严格符合程序':

"不得产生依赖于任何未指定,未定义或实现定义的行为的输出"

因此,原始示例是错误的,因为它确实依赖于未定义的行为,即使有人会替换该行,它也将是未定义的

double b = k++ + ++k + k--;
Run Code Online (Sandbox Code Playgroud)

与线

    k++ + ++k + k--;
Run Code Online (Sandbox Code Playgroud)

所以现在我正在寻找关于什么问题的更好的介绍.

c

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

预增量和后增量

今天我重新审视了Pre Increment和Post Increment.

我知道的基本定义.

预增量 - 增加值并返回值.

后递增 - 递增值并在递增之前返回值.

但是做一些他们的组合我很难过.

使用基本的C程序,这是我测试的.

最初i = 0.

第一次测试

printf("%d %d",++i,++i);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

2 2
Run Code Online (Sandbox Code Playgroud)

我期望:

1 2
Run Code Online (Sandbox Code Playgroud)

第二次测试

printf("%d %d",i++,i++);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

1 0
Run Code Online (Sandbox Code Playgroud)

我期望:

0 1
Run Code Online (Sandbox Code Playgroud)

第三次测试

printf("%d %d",i++,++i);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

1 2
Run Code Online (Sandbox Code Playgroud)

我期望:

0 2
Run Code Online (Sandbox Code Playgroud)

第四次测试

printf("%d %d",++i,i++);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

2 0
Run Code Online (Sandbox Code Playgroud)

我期望:

1 1
Run Code Online (Sandbox Code Playgroud)

我认为评估可能来自右侧或左侧.在Post增量的情况下,如果是Pre Increment,则可能是左边的.也许Pre Increment的优先级高于Post增量.一些与结果相匹配的想法,但在一次测试中做出的假设并不能解释其他输出.

c undefined-behavior pre-increment post-increment

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

scanf()中%u和%d之间的差异

在C++中,如果我从一个字符串中读取一个整数,那么我是否使用ud作为转换说明符并不重要,因为它们都接受负整数.

#include <cstdio>
using namespace std;

int main() {
    int u, d;
    sscanf("-2", "%u", &u);
    sscanf("-2", "%d", &d);
    puts(u == d ? "u == d" : "u != d");
    printf("u: %u %d\n", u, u);
    printf("d: %u %d\n", d, d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ideone.com

我挖得更深,发现是否有任何区别.我找到

int u, d;
sscanf("-2", "%u", &u);
sscanf("-2", "%d", &d);
Run Code Online (Sandbox Code Playgroud)

相当于

int u, d;
u = strtoul("-2", NULL, 10);
d = strtol("-2", NULL, 10);
Run Code Online (Sandbox Code Playgroud)

根据cppreference.com.

是否有任何差异之间的所有ud使用解析这些转换说明,即传递给格式时scanf …

c++ scanf cstdio

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

整数变量的双增量,它是否按预期工作?

我有一些代码用线增加一个计数器.

++ count;
Run Code Online (Sandbox Code Playgroud)

有时我有一个if条件,这意味着我应该将计数增加2.

count += 2;
Run Code Online (Sandbox Code Playgroud)

"双增量"是否以同样的方式工作?

++ ++ count;
Run Code Online (Sandbox Code Playgroud)

知道C和C++编译器是否以相同的方式解释这将是有帮助的.

c++

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

#define ADD(x)(x)+(x)返回错误的结果

我有这个功能,它自己添加一个数字.

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

#define ADD(x)  (x)+(x)
int main()
{
    int x = 2;
    int y = ADD(++x);

    cout << y << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,它返回8但我期待6.

我认为x = 3并且它正在向ADD函数发送3,但它似乎没有.有人可以向我解释一下吗?

c++

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

对c或c ++中的递增和递减运算符感到困惑.预增量或预减量背后的实际逻辑是什么?

int a = 3;
cout << ++a << a++ << ++a << a++ << endl;
Run Code Online (Sandbox Code Playgroud)

codeblocks :: mingw上这段代码的答案是7573.我到现在所知道的是,后增量是正确的,但前增量有一些不同的逻辑.对于所有预增量,最后一个增量的最后一个值将是相同的.任何人都可以用++ a告诉我实际发生了什么.

还有一件事需要从右到左解决.谢谢你的回答.

c++

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