Что такое «метка» в сообщении об ошибке для программирования на C после компиляции ошибки? - PullRequest
0 голосов
/ 08 октября 2018

test.c

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

Посмотрите на приведенный выше код.

Я знаю, что это неправильно.

Однако мой вопрос касается сообщения об ошибке , которое я не понимаю.

Я думал, что сообщение об ошибке будет содержать такие вещи, как "унарный операнд lvalueтребуется " или что-то.

После 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 голосов
/ 08 октября 2018

Вы наткнулись на нестандартную функцию 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.

Это нестандарт C, чтобы убедиться, что вы не используете какие-либо нестандартные функции, установите -std в -std=c99 или любой другой стандарт, который вы хотели бы использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...