Как включить предупреждения для компилятора C версии 6.3.0?

Я начинаю изучать C и с помощью YouTube смог загрузить версию компилятора 6.3.0, хотя в моем учебнике упоминается версия 4.3.3.

Я целенаправленно пытаюсь получить предупреждения (как задачу научиться их интерпретировать) для программы Hello World, не получая ошибок, но не получаю ни одной. Я убрал return(0), а затем убрал вторую кавычку из printf, но PowerShell просто выполняет программу после компиляции, не выдавая никаких предупреждений.

Я пробовал -W, -Wall, -Wextra, -Wreturn-type и даже нашел -Wdouble-promotion, но безуспешно.

Исходный код:

/*
 * program that writes 'hello world'
 */

#include <stdio.h>

int main()
{
   printf("Hello, world!\n");
   return 0;
}

Программный код для проверки предупреждений:

#include <stdio.h>

int main()
{
   printf("Hello, world!\n);
   /*  took away the second quote mark
    *  and the return(0) operation 
    *  to test warnings
    */
}

В результате компиляции и запуска программы

> gcc -Wall -o warning hello_warning.c
PS C:\Users\sofya\OneDrive\Документы\программки> ./warning
Hello, world!

Вместо того, чтобы давать мне некоторые предупреждения, которые предлагает мой учебник, например:

warning: missing terminating " character

Хорошее начало — -Wall -Wextra, но полную информацию смотрите в документации.

Jesper Juhl 12.06.2024 20:44

Я думаю, вы имеете в виду версию GCC 6.3.0. Сам C не имеет версии 6.3.0.

Some programmer dude 12.06.2024 20:45

"Версия C 6.3.0" - такого нет. У вашего компилятора C может быть версия 6.3.0, но это не то же самое, что языковая версия.

Jesper Juhl 12.06.2024 20:46

Каких предупреждений вы ожидаете? Почему вы ожидаете этих предупреждений? Если ваш код верен, вам не следует ожидать никаких предупреждений.

Drew Dormann 12.06.2024 20:47

См. также en.cppreference.com/w/cpp/language/ub

Jesper Juhl 12.06.2024 21:07

Как отсутствие " может быть предупреждением? Без него код невозможно правильно разобрать. Компилятор не может решить, что ему следует перейти сюда и сгенерировать исполняемый файл с предупреждением.

Weather Vane 12.06.2024 21:12

Удаление return из main() соответствует требованиям и не должно вызывать предупреждений или ошибок. int main() — единственная непустая функция, от которой не требуется явно возвращать значение.

Weather Vane 12.06.2024 21:15

@WeatherVane, окей, понял. Я только пытался это понять, потому что в учебнике говорится о получении warning: control reaches end of non-void function, и я запутался и подумал, что делаю что-то не так.

Sofia Zaiafarova 12.06.2024 21:25

@JesperJuhl, спасибо! Это сработало. Хотя я не понимаю, почему -Wall и -Wexrtra не работают сами по себе.

Sofia Zaiafarova 12.06.2024 21:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Синтаксическая ошибка, которую вы провоцируете, опуская закрывающий ", неизменно приводит к ошибке компиляции и, что особенно важно, не создает выходной файл и оставляет уже существующий файл в покое.

Ваш симптом подразумевает, что вы изначально скомпилировали синтаксически правильную версию вашей программы, после чего компиляция не удалась из-за синтаксической ошибки, что привело к последующему вызову ./warning для вызова двоичного файла, полученного в результате более ранней компиляции синтаксически правильной версии программы.


Что касается появления предупреждений во время компиляции, основываясь на полезных комментариях:

  • Даже если все предупреждения включены (-Wall -Wextra), предупреждение не выдается, если вы удалите оператор return из функции main(), а именно:

    • Как отмечает Флюгер:

      Удаление return из main() соответствует требованиям и не должно вызывать предупреждений или ошибок. int main() — единственная непустая функция, от которой не требуется явно возвращать значение.

  • Таким образом, если вы добавили, скажем, int other() { } в свою программу, вы увидите предупреждение, а именно:

    • warning: non-void function does not return a value [-Wreturn-type]

    • Обратите внимание, что предупреждение -Wreturn-type подразумевается -Wall , тогда как -Wextra включает дополнительные предупреждения.

Спасибо, теперь я понял! Ваши дополнительные заметки были особенно полезны.

Sofia Zaiafarova 13.06.2024 08:36

Другие вопросы по теме