为什么他们打印不同的值。请详细说明。 一个文件是:
/* boo.c */
#include <stdio.h>
char main;
void p2()
{
printf("0x%X\n", main);
}
另一个文件是:
/* foo6.c */
void p2(void);
int main()
{
char ch = main;
p2();
printf("Main address is 0x%x\n",main);
printf("Char value is 0x%x\n",ch);
return 0;
}
我希望 p2 和 char ch 打印相同的值,但它们打印的值非常不同。 输出是:
0x55
Main address is 0x401110
Char value is 0x10
我无法得出这些值背后的原因(Main 和 char 值按预期工作,但不是我之前提到的 p2 输出)
最佳答案
char ch = main;
只是截断指向 char 的指针。实现已定义,但您获得低 8 位是有意义的。
现在,另一个编译单元中的 char main
(未初始化)通过直接将函数指针内存映射到 char
上来欺骗编译器,而无需任何转换:这就是 未定义的行为。
(printf
使用的格式与数据类型不匹配...)
试试看:char main=12;
你会得到一个多重定义的符号 main
...
关于c - 目标文件如何在 C 中链接?解释这种特殊情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867089/