C语言:合法的长整型常数

文章正文
发布时间:2025-07-20 17:07

引用 30 楼 ipqtjmqj 的回复:[quote=引用 29 楼 XinYaping 的回复:] [quote=引用 27 楼 ipqtjmqj 的回复:] [quote=引用 26 楼 XinYaping 的回复:] [quote=引用 22 楼 ipqtjmqj 的回复:] [quote=引用 19 楼 XinYaping 的回复:] 你可以说这道题出得很无聊。但是就事论事地说,答案确实是 A。 A也不对,字符常量的类型为int[/quote] 你实际编程看看 A 对不对。[/quote] 实际只能知道size,怎么输出type?[/quote] 我的意思是说你实际地写程序,给整型常量按照 A 来初始化,然后看看编译器给不给 Warning。 const long X = 't';[/quote] 给不给与编译器设置有关,就按你说的, 我写了两句const long x = 't'; const long y = 65; 都没给,按你的逻辑,应该有两个答案[/quote] 其实,这道题确实是一道很无聊的题。但是,题目它已经就这样了。我说点不那么无聊的事情吧。 首先,你说得对,无论是 const long x = 't'; 还是 const long y = 65; 编译器都不会给 Warning。 这也是我预料之中的事情。 不过呢,小弟我半年前作过一个航空机载电子设备的项目,在那个项目中,我们执行一个比较严苛的 C++ 代码检查标准。我们是通过 LDRA 软件,以洛克希德-马丁公司公布出来的一个标准:JSF++ AV Coding Standard 好像是 开发 F-22、F-35战机的时候用的一个 C++ 代码静态分析检查清单,以此来执行代码审核的条件之一。 按照那个军用航空航天标准,比如说 const long x = 65; 这一句在代码审查中肯定就通过不了。为什么呢?因为,标准要求,类似于 long 这样的数据类型,都不能用,而要改为 uint32、uint64 这样的明确表明数据长度的类型。65 既然是用来初始化一个长整型,那么不能直接写 65 而要写成 65L 这样,就应该写成:const uint64 x = 65L; 还有,比如以下这一句: const uint8 y = 0; 这一句也过不了代码审查,要写成这样: const uint8 y = 0U; 类似的规则还有很多,在通常情况下无所谓的一些情况,在我们那个项目中却要返工重写,必须通过这个标准才能通过审查。 补充这样一些信息给你,可能也对你没什么用,权当闲聊吧。