![]() |
1
4
编译器如何将常量值存储在它创建的二进制文件中,这取决于编译器。没有特别的理由认为,像你提议的演员阵容会改变他们名义上所表达的表达方式
运行时
转换(从
然而,如果强制转换碰巧阻止编译器识别避免存储常量值的机会,那么您的强制转换实际上可能会更糟。例如,假设您的目标CPU有一条特定的指令将寄存器的值精确递增1,那么它可能会使用该指令来实现
... 但是没有意识到它可以对
... 考虑到
谨慎使用类型转换,仅在必要时描述 语义学 你的计划。依靠您的编译器来做好工作,如果没有,请寻找更好的编译器。嵌入式环境的编译器通常可以用来理解最小化代码大小的重要性,甚至通用平台的编译器通常也可以选择请求优化最小代码大小。 |
![]() |
2
3
在这种情况下,这并不重要,因为任何类型的整数值的秩都低于
|
![]() |
3
3
在提供的示例中,好处是
签署协议
而不是
类型协议
. 在这种情况下,类型协议在任何情况下都会被类型提升规则击败;转换为后的文字操作数
可以说是更好的维护
签署协议
是使用无符号文字后缀
|
![]() |
4
0
像您的示例中那样的文字可能不会存储为单独的数字常量,但会集成到机器代码指令中。在您的情况下,结果将是一些指令,如“逻辑左移位寄存器x,1”。然后,无论更高级别的C语言说什么,该数字都将与特定指令所需的数字一样大。
这些是您应该留给编译器的优化类型。这适用于整数常量(“文字”),
但是,如果将常量用作
类型
|
![]() |
5
0
我做了一些实验 Compiler Explorer .
Clang 11.0.1与
以及以下错误
GCC 10.2带
以及以下错误
结论
|
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |