c/c++语言开发共享总和+++我在C中的未定义行为?

我在不同的机器和不同的编译器上测试了这个,但是我给出了相同的输出:

int sum = 10, i = 5; printf("%d", sum+++i); 

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

    它定义明确。 sum+++i被解析为sum++ + i ,结果为15 (具有递增sum的副作用)。

    C11§6.4词汇元素

    如果输入流已被解析为预处理令牌直到给定字符,则下一个预处理令牌是可构成预处理令牌的最长字符序列。 此规则有一个例外:标头名称预处理标记仅在#include预处理指令和#pragma指令内的实现定义位置中被识别。 在这样的上下文中,可以是标题名称或字符串文字的字符序列被识别为前者。

    并且遵循类似的示例:

    示例2程序片段x+++++y被解析为x ++ ++ + y ,它违反了增量运算符的约束,即使解析x ++ + ++ y可能产生正确的表达式。

    这个说法

     printf("%d", sum+++i); 

    对应于

     printf("%d", sum++ + i); 

    并且是一份结构良好的声明。 没有任何未定义的行为。

    输出将是

     15 

    根据C标准(6.4词汇元素)

    4如果输入流已被解析为预处理标记,直到给定字符,则下一个预处理标记是可构成预处理标记的最长字符序列

    需要了解更多c/c++开发分享总和+++我在C中的未定义行为?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享总和+++我在C中的未定义行为?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享总和+++我在C中的未定义行为?

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979523.html

      (0)
      上一篇 2021年12月12日 下午11:48
      下一篇 2021年12月12日 下午11:49

      精彩推荐