在Expert C Programming中,第 146 页上有一个练习,旨在说明典型的 Unix OS 如何将a.out
文件的各个段分配到各个内存段中以供执行。
“入门”代码是:
main () {
int i;
printf("The stack top is near %#X\n", &i);
}
编译器会警告但不会出错,使用%X
with &i
:
warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat]
作为内存布局和十六进制地址的新手,我只是想知道推荐的格式是否不能完全代表所需的信息?我四处搜寻,但找不到任何确定的东西——例如,我读到了有关使用%p
格式提示的信息,但不清楚这种情况是否有必要这样做。
此外,这本神圣的 C 书是否会犯这样的错误似乎值得怀疑,所以我认为这对于这个用例来说是一个无关紧要的警告,但我想确定一下。