错误:使用标签时使用&&运算符时未定义

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 ilabel,而不是整数?我们什么时候使用&& 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)

R. *_*des 15

什么&&运营商?C++中没有一元&&运算符.GCC有一个允许计算goto语句的扩展名,该扩展名使用&&来获取标签的地址.


oua*_*uah 9

&&是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中的标签只能放在语句之前而不是声明之前.

  • 这个答案是对的.`&&`被`gcc`用来获取标签的地址.为什么选择downvote? (4认同)