man*_*m-n 4 c c++ linux gcc operator-overloading
int main()
{
int i = 0;
int *p = &i;
int *q = &&i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用gccon 编译时Linux,我收到错误
addr.c: In function ‘main’:
addr.c:6:2: error: label ‘i’ used but not defined
Run Code Online (Sandbox Code Playgroud)
为什么编译器处理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;})
Run Code Online (Sandbox Code Playgroud)
这&&是GNU C标签地址运算符.
http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
int *q = &&i;
Run Code Online (Sandbox Code Playgroud)
i必须是一个标签.您i的计划中没有标签.
标签示例:
int main(void)
{
i:
(void) 0;
int i = 0;
int *p = &i;
int *q = &&i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我添加了(void) 0;语句,因为C中的标签只能放在语句之前而不是声明之前.