int main()
{
int i = 0;
int *p = &i;
int *q = &&i;
return 0;
}
使用gcc
on编译Linux
时,出现错误
addr.c: In function ‘main’:
addr.c:6:2: error: label ‘i’ used but not defined
为什么编译器将int i
其视为label
整数而不是整数?我们什么时候使用&& operator
?
编辑:好的,我可以有点理解答案,但你能解释一下“arch/arm/include/asm/processor.h”中的以下宏定义吗?它没有说任何关于label
,但评论说,它可以返回“ program counter
”
/*
* Default implementation of macro that returns current
* instruction pointer ("program counter").
*/
#define current_text_addr() ({ __label__ _l; _l: &&_l;})