Почему компилятор GCC не поддерживает директивы #pragma startup и #pragma exit?

#c #gcc #c-preprocessor

#c #gcc #c-препроцессор

Вопрос:

Я новичок в языке C и пытался изучить директиву препроцессора #pragma. Я посмотрел в Google и нашел эту ссылку: Директива GeeksforGeeks Pragma в C

В этой ссылке они сказали, что директивы #pragma startup и #pragma exit директивы не работают в компиляторе GCC. Почему это так??

Я написал ту же программу, что и данная, используя компилятор MinGW GCC, и он выдал следующее предупреждение:

warning: ignoring #pragma startup func1 [-Wunknown-pragmas]|

warning: ignoring #pragma exit func2 [-Wunknown-pragmas]|

Комментарии:

1. Ни один из них не определен стандартом C, поэтому нет оснований ожидать, что они будут работать на разных компиляторах. Согласно документам gcc по pragma , » #pragma Директива — это метод, указанный стандартом C для предоставления компилятору дополнительной информации, помимо того, что передается в самом языке . . . . Компилятор C может свободно придавать любое значение, которое ему нравится, другим прагмам».

2. @Brian опубликуйте это как ответ

Ответ №1:

Согласно документации GCC по pragma,

#pragma Директива — это метод, указанный стандартом C для предоставления компилятору дополнительной информации, помимо того, что передается в самом языке . . . . Компилятор C может свободно придавать любое значение, которое ему нравится, другим прагмам «.

Ни одна из упомянутых вами директив не определена стандартом C, поэтому нет оснований ожидать, что они будут работать на разных компиляторах. Как упоминалось в статье, на которую вы ссылались, GCC предпочитает использовать другую векторную функцию для сообщения о том, что функция должна вызываться до или после main , а именно атрибуты функции.

Ответ №2:

С веб-сайта gcc: https://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas

  1. GCC поддерживает несколько типов прагм, в первую очередь для компиляции кода, изначально написанного для других компиляторов. Обратите внимание, что в целом мы не рекомендуем использовать прагмы.

  2. Существует некоторое совпадение между назначениями атрибутов и прагм (см. Прагмы, принятые GCC). Было обнаружено, что удобно использовать attribute для достижения естественной привязки атрибутов к их соответствующим объявлениям, тогда как #pragma полезен для совместимости с другими компиляторами или конструкциями, которые естественным образом не являются частью грамматики.

С веб-сайта gcc совершенно ясно, что использование #pragma поддерживается, но не рекомендуется.

Ссылка на 2 пункта:https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes