![]() |
1
2
你第一个问题的答案是肯定的。char本质上是一个非常小的整型,因此编译器非常宽松。double不可接受,因为它不是整数类型。0xCCCCC是从未初始化过的内存(调试目的除外)。因为ASCII字符只能有两个十六进制数字,所以转换根本无法设置前24位(并且只将最后8位设置为0)。这是一个多么奇怪和不受欢迎的编译器技巧。 |
![]() |
2
5
按照C++标准的正确做法是:
不要将返回类型改为其他任何类型,否则代码不会是C++,而只是在使用特定于编译器的功能。示例中的那些CCCCC值只是返回的单元化字节(C分配器将其设置为0xCC)。 |
![]() |
3
4
从主函数返回的值将成为进程的退出状态,尽管C标准仅将特定的含义赋予两个值:退出成功(传统上为零)和退出失败。其他可能返回值的含义是实现定义的。但是,对于如何解释非零代码没有标准。 你可以参考一篇有用的文章: |
![]() |
4
3
又一个MSVC扩展/错误! |
![]() |
5
2
据我所知,在标准文档中提到“应”而代码没有指示的任何内容都是编译器需要诊断的即时条件,除非标准明确规定不需要此类诊断。 所以我猜如果允许这样的代码,vs有一个bug。 |
![]() |
6
1
这个
简短回答:不要这样做。 |
![]() |
7
1
这可能是因为char将隐式转换为int,但是double不会像数据丢失那样进行转换。 (见此处: http://msdn.microsoft.com/en-us/library/y5b434w4%28v=VS.71%29.aspx 更多信息) 但是,您不会看到转换问题,因为编译器捕获了使用非标准返回类型的最坏罪恶(如其他答案中所述)。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 7 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 8 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 8 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 8 月前 |