我知道引用注册变量的地址会导致编译错误。
int main()
{
register int i = 10;
int *a = &i;
printf("%d", *a);
getchar();
return 0;
}
正如预期的那样,gcc
由于引用了已注册变量的地址,因此在使用时会出现编译器错误i
。
那么下面的代码,做了类似的事情,怎么会没有错误呢?
#include<stdio.h>
int *NEXT(register int i)
{
int *ipt;
ipt = &i;
ipt++;
return ipt;
}
main ()
{
int j=2;
printf("%d",(NEXT(j)));
}
编辑:我的 gcc 版本在
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (基于 Apple Inc. build 5658) (LLVM build 2335.15.00) 版权所有 (C) 2007 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。