Что означает #pragma Once в C?

Возможный дубликат:
#pragma - помогите разобраться

Я видел pragma много раз, но всегда путался, кто-нибудь знает, что он делает? Это только окна?


person wireshark    schedule 25.04.2011    source источник


Ответы (4)


В языках программирования C и C ++ #pragma once - нестандартная, но широко поддерживаемая директива препроцессора, предназначенная для включения текущего исходного файла только один раз в одну компиляцию. Таким образом, #pragma однажды служит той же цели, что и #include guards, но имеет ряд преимуществ, в том числе: меньший объем кода, предотвращение конфликтов имен и повышенную скорость компиляции.

Дополнительные сведения см. В статье Википедии.

person helpermethod    schedule 25.04.2011
comment
Что значит pragma? Я не могу этого вспомнить ... - person wireshark; 25.04.2011
comment
@wireshark это греческое слово, πράγμα, и оно происходит от прагматического, как сказано здесь .... Потому что точное значение по-гречески - вещь, но если вы сосредоточитесь на том, откуда оно взялось, вы можете сказать, что оно означает действие. - person gsamaras; 20.07.2016

Он используется для замены следующего кода препроцессора:

#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

Хорошим соглашением является добавление обоих для поддержки устаревших компиляторов (что случается редко):

#pragma once
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

Так что, если #pragma однажды выйдет из строя, старый метод все равно будет работать.

person Alex Kremer    schedule 25.04.2011
comment
Спасибо за пример. - person A. Mashreghi; 22.11.2019

Как правило, директивы #pragma предназначены для реализации инструкций препроцессора, специфичных для компилятора. Они не стандартизированы, поэтому не стоит слишком на них полагаться.

В этом случае цель #pragma once - заменить защиту включения, которую вы используете в файлах заголовков, чтобы избежать множественного включения. Он работает немного быстрее с компиляторами, которые его поддерживают, поэтому может сократить время компиляции для больших проектов с большим количеством файлов заголовков, которые часто #include'ed.

person Community    schedule 25.04.2011

pragma - это директива препроцессору. Обычно он используется для обеспечения некоторого дополнительного контроля во время компиляции. Например, не включайте тот же код файла заголовка. Есть много разных директив. Ответ зависит от того, что следует за словом прагмы.

person danny_23    schedule 25.04.2011