错误编译后的C编程错误消息中的“标签”是什么?

时间:2018-10-08 02:11:17

标签: c pointers compiler-errors compilation label

test.c

#include <stdio.h>
int main(void)
{
    int a = 13; 
    const int **pp = &&a;
    return 0;
}

看上面的代码。

我知道这是不对的。

但是,我的问题是关于我不理解的错误消息

我认为错误消息将包含诸如“需要左值一元操作数”之类的东西

cc -std = c11 test.c 之后,我得到了:

test.c: In function ‘main’:
test.c:7:2: error: label ‘a’ used but not defined
  const int **pp = &&a;

我认为 a 应该被称为变量标识符,它们已经使用 int a = 13进行了定义;

错误编译后,C编程语言错误消息中的

标签是什么?

1 个答案:

答案 0 :(得分:3)

您偶然发现了名为Labels As Values的非标准GCC功能。

将代码更改为以下内容,然后看看会发生什么。

#include <stdio.h>
int main(void) 
{
    int a = 13; 
    void *pp = &&a;
    goto *pp;
    return 0;
a:
    printf("ooooops\n");
    return 0;
}

从本质上讲,这是一种将goto标签用作值的方法,即可以将标签分配给void *指针,然后在goto语句中使用该指针。 / p>

这不是标准C,以确保您不会使用任何将-std设置为-std=c99的非标准功能,也不要使用您想要使用的任何标准。