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

“什么是”呢;标签";在错误编译后的C编程错误消息中?,c,pointers,compiler-errors,compilation,label,C,Pointers,Compiler Errors,Compilation,Label,测试c 我认为a应该被称为变量或标识符,该标识符已经使用int a=13定义 错误编译后,C编程语言的错误消息中的标签是什么 您偶然发现了一个名为的非标准GCC功能 将您的代码更改为以下内容,然后看看会发生什么 test.c: In function ‘main’: test.c:7:2: error: label ‘a’ used but not defined const int **pp = &&a; #包括 内部主(空) { INTA=13; 无效*pp=&&a;

测试c

我认为a应该被称为变量标识符,该标识符已经使用int a=13定义


错误编译后,C编程语言的错误消息中的标签是什么

您偶然发现了一个名为的非标准GCC功能

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

test.c: In function ‘main’:
test.c:7:2: error: label ‘a’ used but not defined
  const int **pp = &&a;
#包括
内部主(空)
{
INTA=13;
无效*pp=&&a;
转到*pp;
返回0;
a:
printf(“oooops\n”);
返回0;
}
它基本上是一种使用
goto
标签作为值的方法,从这个意义上讲,您可以将标签分配给
void*
指针,然后在
goto
语句中使用该指针


这不是标准C,以确保您没有使用任何非标准功能集
-std
-std=c99
,或者您想要使用的任何标准。

您偶然发现了一个名为的非标准GCC功能

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

test.c: In function ‘main’:
test.c:7:2: error: label ‘a’ used but not defined
  const int **pp = &&a;
#包括
内部主(空)
{
INTA=13;
无效*pp=&&a;
转到*pp;
返回0;
a:
printf(“oooops\n”);
返回0;
}
它基本上是一种使用
goto
标签作为值的方法,从这个意义上讲,您可以将标签分配给
void*
指针,然后在
goto
语句中使用该指针


这不是标准C,以确保您没有使用任何非标准功能集
-std
-std=c99
,或者您希望使用的任何标准。

在此上下文中,“a”的地址的地址是什么意思?哪个编译器向您发送了此错误消息?我收到
C2059语法错误:'&&&'StackOverFlow d:\repo\wip\ctest\StackOverFlow\StackOverFlow\source.c 11
。我怀疑您使用的编译器有一些扩展,可以使用
&
获取标签地址。在未扩展的C中,
&&
是一个运算符;它不是
&&
。您只能获取对象的地址;您不能获取地址的地址。可能与“a”的地址在本上下文中的含义重复?哪个编译器向您发送了此错误消息?我收到
C2059语法错误:'&&&'StackOverFlow d:\repo\wip\ctest\StackOverFlow\StackOverFlow\source.c 11
。我怀疑您使用的编译器有一些扩展,可以使用
&
获取标签地址。在未扩展的C中,
&&
是一个运算符;它不是
&&
。您只能获取对象的地址;您不能获取地址的地址。可能会复制更多的地址到该点-将代码更改为
void*pp=&a@JonathanLeffler我想你没有抓住重点。问题清楚地询问错误消息中的
标签是什么,而不是如何修复它。更重要的是,将代码更改为
void*pp=&a@JonathanLeffler我想你没有抓住重点。问题明确询问错误消息中的
标签是什么,而不是如何修复它。
#include <stdio.h>
int main(void) 
{
    int a = 13; 
    void *pp = &&a;
    goto *pp;
    return 0;
a:
    printf("ooooops\n");
    return 0;
}