Как использовать, делают и компилируют как C99?

Я пытаюсь скомпилировать модуль ядра Linux с помощью Make-файла:

obj-m += main.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Который дает мне:

main.c:54: warning: ISO C90 forbids mixed declarations and code

Я должен переключиться на C99. После чтения я заметил, что должен добавить флаг-std=c99, не уверенный, где оно предполагает, чтобы быть добавленным.

Как я изменяю Make-файл, таким образом, он скомпилирует как C99?

19
задан Job 4 April 2011 в 19:55
поделиться

1 ответ

Это не имеет ничего общего с make-файлом. ISO C90 запрещает объявлять переменные где угодно, кроме начала блока или файла - вот так

int main(int argc, char **argv) {
   int a; /* Ok */
   int b = 3; /* Ok */

   printf("Hello, the magic number is %d!\n", b);
   int c = 42; /* ERROR! Can only declare variables in the beginning of the block */
   printf("I also like %d.. but not as much as %d!\n", c, b);

   return 0;
}

Таким образом, это должно быть изменено на это ...

int main(int argc, char **argv) {
   int a; /* Ok */
   int b = 3; /* Ok */
   int c = 42; /* Ok! */

   printf("Hello, the magic number is %d!\n", b);
   printf("I also like %d.. but not as much as %d!\n", c, b);

   return 0;
}

Вы можете «исправить» это только в исходном коде, а не в make-файл.

Это правило было ослаблено в C99, но, на мой взгляд, было бы неплохо отделить определения переменных, объявления и инициализации от кода ниже:)

Итак, чтобы изменить свой make-файл, чтобы он скомпилировался с C99, вы необходимо изменить Makefile в каталоге «build», на который ссылается ваш make-файл, и добавить «-std = c99» в строку «gcc», компилирующую исходный файл.

-6
ответ дан 30 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: