LINUX.ORG.RU

arm-none-eabi-gcc и стандарт C99 - компилер не понимает true/false

 ,


0

1

Привет, народ!

Пытаюсь скомпилить си-шный исходник, в котором есть конструкция:

    while (true) {
        msDelay(500);
        LEDPORT->ODR ^= (1<<LED1);
    }

Чтобы компилер понимал true/false, в команду компиляции добавлено "-std=c99". Полная команда выглядит так:
arm-none-eabi-gcc -o .pio/build/bluepill_f103c8/src/main.o -c -std=c99 -Os -ffunction-sections -fdata-sections -Wall -mthumb -mcpu=cortex-m3 -DPLATFORMIO=50205 -DSTM32F1 -DSTM32F103xB -DF_CPU=72000000L -Iinclude -Isrc -I/home/xi/.platformio/packages/framework-cmsis@2.50501.200527/CMSIS/Include -I/home/xi/.platformio/packages/framework-cmsis-stm32f1/Include src/main.c

В результате выдается ошибка:
src/main.c: In function 'main':
src/main.c:22:12: error: 'true' undeclared (first use in this function)
     while (true) {
            ^~~~
src/main.c:22:12: note: each undeclared identifier is reported only once for each function it appears in
*** [.pio/build/bluepill_f103c8/src/main.o] Error 1

Что еще нужно крутить, чтобы true/false воспринимались компилятором?

★★★★★

Что еще нужно крутить, чтобы true/false воспринимались компилятором?

Комплиировать через g++

ox55ff ★★★★★
()
Ответ на: комментарий от Qathos

#include <stdbool.h>

+1

Кстати, gcc начиная с 11 выводит более полезное сообщение об ошибке:

$ cat main.c
int main() {
    while(true){}
}
$ gcc main.c -std=c99
main.c: In function 'main':
main.c:2:11: error: 'true' undeclared (first use in this function)
    2 |     while(true){}
      |           ^~~~
main.c:1:1: note: 'true' is defined in header '<stdbool.h>'; did you forget to '#include <stdbool.h>'?
  +++ |+#include <stdbool.h>
    1 | int main() {
main.c:2:11: note: each undeclared identifier is reported only once for each function it appears in
    2 |     while(true){}
      |           ^~~~
fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

Кстати, gcc начиная с 11 выводит более полезное сообщение об ошибке:

Очень «полезно», вместо одной строки на ошибку (которая была в gcc4), выводит целую простыню. А если ошибок несколько то в этих простынях зрительно сложно разобраться и понять где какая ошибка. Взяли пример с дурацкого цланга. Хоть бы опцию для отключения этого спама сделали.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Очень «полезно», вместо одной строки на ошибку (которая была в gcc4), выводит целую простыню. А если ошибок несколько то в этих простынях зрительно сложно разобраться и понять где какая ошибка. Взяли пример с дурацкого цланга. Хоть бы опцию для отключения этого спама сделали.

И таким деятелям в голову не приходит, что если бы нормальные подробные ошибки были в компиляторе раньше, то ему бы не пришлось спамить в этой теме, потому что этой темы просто бы небыло.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Не надо путать сообщение об ошибке и гайд по её исправлению. Большинству гайды не нужны. Пусть бы они выдавались с опцией --verbose. Или хотя бы была бы опция --no-verbose-errors.

то ему бы не пришлось спамить в этой теме

Кому спамить? В этой теме никто не спамил. Спамит компилятор, когда на тупую очевидную опечатку (это не про эту тему, а про то, откуда берётся большинство ошибок) выдаёт бесполезную простыню какого-то текста, в котором самое главное - номер строчки - и не сразу увидишь.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Xintrea

А если бы ты почитал Changelog к стандарту С99 внимательно, этой темы тоже бы не было.

явный логический тип данных, новые заголовочные файлы, такие как stdbool.h и inttypes.h

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

явный логический тип данных, новые заголовочные файлы, такие как stdbool.h и inttypes.h

Я вообще не ожидал, что true/false будут не частью языка, а реализованы через хидеры.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от firkax

Чудак, почему ты постоянно всем недоволен и ноешь из темы в тему? Если ты знаешь лучше других «как надо», иди и делай, чего скулишь?

Да, я за тобой слежу.

filosofia
()
Ответ на: комментарий от No

спасибо

добавлю себе в дефолтные параметры компилятора

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от filosofia

Не «всем» а только некоторыми плохими вещами, не надо преувеличивать. Я и делаю когда время находится.

firkax ★★★★★
()
Ответ на: комментарий от fsb4000

Это с любым именем из стандартной библиотеки так? Если я напишу printf() без нужного инклуда, она мне посоветует подключить stdio.h?

Оригинальненко.

hobbit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.