测试.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语言编译出错后报错信息中的label是什么?
最佳答案
您偶然发现了一个名为 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 *
指针,然后在 中使用该指针code>goto
语句。
这不是标准 C,以确保您不使用任何非标准功能集 -std
到 -std=c99
或任何您的标准我想用。
关于c - C编程报错后报错信息中的 "label"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52694553/