Q我如何访问位于机器地址 0 的中断向量?如果我设置一个指向0,编译器可能会将其转换为某个非零的内部空指针值。
A由于位置 0 的任何内容显然都与机器有关,您可以自由使用任何有效的与机器相关的技巧来访问它。请阅读您的供应商文档(并参阅第 19 节)。如果访问位置 0 对您来说有任何意义,那么系统很可能设置为相对容易地做到这一点。一些可能性包括:
union { int *u_p; int u_i; /* assumes sizeof(int) >= sizeof(int *) */ } p; p.u_i = 0;
memset((void *)&p, 0, sizeof(p));
extern int location0;并使用汇编语言文件,或某些特殊的链接器调用,安排该符号指向(即变量放置在)地址 0。
参考文献:K&R1 第 A14.4 节,第 210 页
K&R2 第 A6.6 节,第 199 页
ISO 第 6.3.4 节
Rationale 第 3.3.4 节
H&S 第 6.2.7 节,第 171-2 页