C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C中的括号是否会导致隐式演员?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
背景

我最后一次询问括号是否导致隐式转换(here)时,@ pmg足以指出“C中的任何内容都不在int下面”但是,那里的讨论是关于按位运算符,括号结果是只是分心.

介绍

下面,括号是主要的吸引力.或者,为了更无聊但更精确,我看到的唯一运算符是括号和赋值运算符.

At this reference about the C parentheses operator,我没有看到有关括号更改类型的任何内容(在类型转换语法之外,这不是这种情况).

同时,here’s a reference that reminds that there is automatic type conversion on assignment,但我认为这不会解释我将在这里描述的静态分析工具行为.

与前一个问题一样,“OK”表示静态分析工具没有警告隐式类型转换,“NOT OK”表示它确实存在.

int main(void)
{
    unsigned int  ui;
    int i;

    ui = (256U); // NOT OK (*) (1)
    i = (256U); // NOT OK (*)  (2)

    i = 256; // OK
    i = 256U; // NOT OK
    ui = 256U; // OK   (3)
    ui = 256; // NOT OK

 return(0);
}

除了前两个,我能理解它们 – 括号的作用是什么?如果他们没有采取隐式类型转换的方式,那么我希望(1)没问题,(2)不行.如果他们对int小于int的类型进行自动类型提升,那么我希望(1)不正常,(2)没问题.但是这个工具说两者都不行.

这是一个静态分析工具错误,还是工具正确,我还需要了解C中隐式类型转换的其他内容

(顺便说一句,我希望值256足够小,不会导致我的机器溢出……)

解决方法

首先,让我们澄清一些术语.没有什么可以导致“隐性演员”,因为没有这样的事情.强制转换是一个显式运算符,由表达式前面括号中的类型名称组成,例如(doublE)42;它指定转换.转换可以是显式的(由强制转换运算符指定)也可以是隐式的,如double x = 42;.所以你真正要问的是括号是否会导致隐式转换.

至少在你向我们展示的代码中,答案是否定的.

引用C99 standard(3.7 MB PDF),第6.5.1p5节:

因为256U已经是主要表达式,所以括号根本没有区别;括号通常表示优先级,但在这种情况下,没有预先指示.

你使用什么静态分析工具?您应该提交错误报告.

大佬总结

以上是大佬教程为你收集整理的C中的括号是否会导致隐式演员?全部内容,希望文章能够帮你解决C中的括号是否会导致隐式演员?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。