我想知道在编译/预处理期间是否可以将已知字符串转换为int。C - 在编译时将字符串转换为int
想象我与字符“AB”字符串,我想在一个工会把它变成一个INT,如:
union StrInt
{
int i;
char c[2];
}
的c[ ] = 'AB'
会让我拥有价值16961
我想这样做,但在编译/预处理期间
我想知道在编译/预处理期间是否可以将已知字符串转换为int。C - 在编译时将字符串转换为int
想象我与字符“AB”字符串,我想在一个工会把它变成一个INT,如:
union StrInt
{
int i;
char c[2];
}
的c[ ] = 'AB'
会让我拥有价值16961
我想这样做,但在编译/预处理期间
是的。 在我的架构下(x86_64-PC-Linux的GNU ),这样的:
union {
int i;
char c[2];
} u = { .c="AB" };
int main()
{
printf("%d\n", u.i);
}
打印16961就像你期望的那样。 (不同的实现可能会给你不同的输出。)
字符数组通常可以用字符串文字初始化。
{ .c= { 'A', 'B' } }
将成为初创c
成员的另一种方式。
但是这在预处理/编译期间完成了吗?还是执行?谢谢;) – user7122079
“AB”被静态烘焙到二进制图像中,并且在运行时您只需以int形式访问。没有涉及转换。该值是静态已知的,但不是整数常量表达式(或现代C++方言中的constexpr)。 (实际上,它不可用,例如,在开关或其他需要整数常量的地方) – PSkocik
多字符常量的定义非常差。不仅长度留给执行,而且还有永久性和编码。你应该更明确地指出这一点。 – Olaf
你为什么要这样做? –
这对我的应用程序非常有用。 – user7122079
C不是C++不是C.选一个! – Olaf