相同的表达式产生完全不同的结果

Ben-xue
#include <stdio.h>

#define Alphabet    26

struct Data
{
    int iNum;
};

int main()
{
    #if 0
        int iNum = 0;
        while(1)
        {
            iNum = (iNum++ % Alphabet);
            printf("%d\n",iNum);
        }
    #else
        Data data = {0};
        while(1)
        {
            data.iNum = (data.iNum++ % Alphabet);
            printf("%d\n",data.iNum);
        }
    #endif

    return 0;
}

#if分支中打印1-26;但是在#else分支中打印1,2,3,...这可能是因为addlea汇编指令有关,但是为什么要使用不同的指令?我不太清楚。

那么,是否必须防止以这种方式编码?喜欢iNum = (iNum++ % Alphabet)

gnasher729

您的第二个示例是未定义的行为。同一对象(data.iNum)被修改两次,而无需插入顺序点。可能发生任何事情,包括您的应用程序崩溃,包括仅当您将其交付给付费客户时才崩溃,该客户将向您起诉数百万美元。

PS。不,相同的表达式不会产生不同的结果。具有非常小的相似性的两个非常不同的表达式产生了不同的结果。由于在具有ARM处理器的计算机上运行代码时也会发生同样的情况,因此它与汇编指令无关。组装说明根本不涉及。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

不同路线的两个相同的 ERB 表达式产生不同的结果

Linq表达式和foreach产生不同的结果

正则表达式可匹配3种完全不同的文本样式

与“等价”永不匹配的正则表达式完全不同的计时?

为什么在线测试的正则表达式在C ++中表现完全不同?

在 C# 中获得相同表达式的不同结果

线程同步 - 几乎相同的表达式但不同的结果

Tensorflow:来自相同初始猜测的完全不同的结果

如果字符串中的内容与模式所检查的完全不同,则正则表达式返回false

正则表达式 - 为什么这两个表达式不会产生相同的结果?

完全相同的代码在不同设备上获得完全不同的Tensorboard结果

C中的“条件中使用的表达式总是产生相同的结果”警告

使用定义的过程作为参数所产生的结果与使用lambda表达式作为参数所产生的结果不同

节点调试:监视表达式与exec console.log产生不同的结果

隐式和显式正则表达式的创建会产生不同的执行结果

Powershell正则表达式产生与.NET在线测试仪不同的结果

使用“std::cout”打印相同指针的连续行产生完全不同的输出

为什么从相同数学表达式的两种形式[javascript]中得到不同的结果?

正则表达式相同,但Pandas vs. R中的结果不同

正则表达式相同,但StringTokenizer和Scanner类定界符给出不同的结果

为什么相同的正则表达式会给出两个不同的结果?

相同的正则表达式在Java和JavaScript中有不同的结果

python 3,正则表达式为相同的字符串返回不同的结果

JS正则表达式:exec():将不同的组“合并”到相同的结果

在 C# 中使用相同的正则表达式模式获得不同的结果

余弦相似性和使用相同来源的完全不同的结果

为什么此javascript非贪婪正则表达式完全不匹配?

正则表达式编号以0开头或完全不允许

正则表达式可匹配完整单词,但首次失败时完全不匹配