从C++ 14开始,感谢n3781(它本身没有回答这个问题),我们可能会编写如下代码:
const int x = 1'234; // one thousand two hundred and thirty four
Run Code Online (Sandbox Code Playgroud)
目的是改进这样的代码:
const int y = 100000000;
Run Code Online (Sandbox Code Playgroud)
并使其更具可读性.
下划线(_)字符已经由用户定义的文本采取了C++ 11,和逗号(,)的本地化问题-许多欧洲国家令人困惑†以此作为小数点分隔符-与逗号运算符的冲突,虽然我做的想知道什么样的现实世界的代码可能会被允许,例如1,234,567.
无论如何,更好的解决方案似乎是空间特征:
const int z = 1 000 000;
Run Code Online (Sandbox Code Playgroud)
这些相邻的数字文字标记可以由预处理器连接,就像字符串文字一样:
const char x[5] = "a" "bc" "d";
Run Code Online (Sandbox Code Playgroud)
相反,我们得到了撇号('),我没有被任何我认识为数字分隔符的书写系统使用.
是否有理由选择撇号而不是简单的空间?
†令人费解,因为所有这些语言都在文本中保留了一个逗号"分开"一个原本句子的概念,其句号用于"终止"句子 - 至少对我来说,这非常类似于逗号"分开"一个数字的整数部分和一个句号"终止"它为分数输入做好准备.
有一段时间,我一直用科学记数法表示常量中10的大功率,所以我不需要计算零.例如
#define DELAY_USEC 1e6
Run Code Online (Sandbox Code Playgroud)
一位同事指出这不安全,因为它不是一个整数,并且不能保证总是完全等于1000000 .文档似乎证实了这一点,但我想知道它的实用性是否真实.有没有办法用速记安全地声明十次幂的整数?将它强制转换为定义中的int是否安全?
是否有更人性化的方式来表示用C++或C编写的应用程序的源代码中的大数字?
例如2,345,879,444,641,如果我们想要一个程序返回我们要做的那个数字,那么就用C或C++中的数字来表示return 2345879444641.
但这不是真的可读.
例如,在PAWN(一种脚本语言)中,我可以做return 2_345_879_444_641甚至是return 2_34_58_79_44_46_41这两种语言都可以返回数字2,345,879,444,641.
对于人眼来说,这更具可读性.
这有C或C++的等价物吗?
我正在为微处理器编写一些代码.
它有一些大的关键常数.
#define F_CPU 16000000UL
在这种情况下,这是CPU频率.在赫兹.
实际上,如果没有手动在数字上标记光标,则很难判断它是1,600,000,160,000,000还是16,000,000.
如果我在数字中加入逗号#define F_CPU 16,000,000UL,它会截断常量.
我使用了一些具有特定数字分隔符的深奥语言,旨在使大数字更具可读性(例如16_000_000,主要是用于MCU的语言).大型"神奇数字"在嵌入式内容中相当普遍,因为它们需要描述MCU如何与现实世界对话.
C中有这样的东西吗?
到底什么被赋予了价值?我很惊讶这竟然已经编译完成了。
//g++ 7.4.0
#include <iostream>
int main()
{
auto value = 123'456'7;
std::cout << value << std::endl;
value += 1;
std::cout << value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1234567
1234568
Run Code Online (Sandbox Code Playgroud)