Может кто-нибудь, пожалуйста, скажите мне использование прагматических утверждений - PullRequest
1 голос
/ 19 апреля 2010

Может кто-нибудь сказать, пожалуйста, использование прагмы в Си и Аде, с некоторыми примерами, если это возможно.

Ответы [ 5 ]

5 голосов
/ 19 апреля 2010

В C99 есть три стандартных прагмы:

#pragma STDC FP_CONTRACT on-off-switch
#pragma STDC FENV_ACCESS on-off-switch
#pragma STDC CX_LIMITED_RANGE on-off-switch

Где «вкл-выкл» один из ВКЛ, ВЫКЛ, ПО УМОЛЧАНИЮ.

Они могут быть использованы во время компиляции для изменения поведения компилятора загадочными способами (они связаны с поведением C99 с плавающей запятой). Стандарт резервирует STDC для стандартных прагм; другие люди могут использовать все, что им нравится.

Есть и нестандартные прагмы - как указал Самуэль Клатчко.

По сути, это способ заставить компилятор выполнять нестандартные операции в нестандартном режиме. Одним из примеров является «#pragma pack», что означает, что структуры создаются без заполнения между элементами, даже если это означает, что доступ к этим элементам будет неоптимальным (предположительно, пространство важнее времени). Это не особенно хорошая идея (хотя те, кто ее использует, будут возражать против этого); но это общепринятое требование, поэтому компиляторы часто его поддерживают.

Я программировал на C - о, 25 лет и немного, чтобы сэкономить. Мне не нужно было использовать прагму один раз. Я играл с ним пару раз, но никогда не нуждался в этом. Может быть, мне повезло.

4 голосов
/ 19 апреля 2010

В C большинство прагм зависят от компилятора / платформы (хотя некоторые, такие как #pragma once, широко применяются).

Вот страница на gcc pragmas и еще одна на Microsoft VC pragmas .

3 голосов
/ 19 апреля 2010

В Ada «A pragma - это директива компилятора». Многие из них определены языком, но определяемые реализацией прагмы разрешены Обоснование для Ады 2005 предлагает множество примеров.

3 голосов
/ 19 апреля 2010

... для прагматичного программиста; -)


Директива `# pragma ' - это метод, определенный стандартом C для предоставления компилятору дополнительной информации, помимо того, что передается в самом языке. Три формы этой директивы (обычно известные как прагмы) определены стандартом C 1999 года. Компилятор C может прикрепить любое значение, которое ему нравится, к другим прагмам.

http://gcc.gnu.org/onlinedocs/cpp/Pragmas.html

http://msdn.microsoft.com/en-us/library/d9x1s805%28VS.71%29.aspx

0 голосов
/ 19 апреля 2010

Вы можете рассматривать их как команды для компилятора. Эти команды используются во время процесса компиляции.

Пример

#include<windows.h>

#pragma comment("lib","shell32.lib")

wmain(){
......
}

В приведенном выше примере вы в основном просите компоновщик автоматически включить shell32.lib при компоновке вашей программы. без этого вы должны вручную указать shell32.lib в командной строке cl.exe

Другой пример будет вы можете попросить компилятор функций в конечном исполняемом файле ...

#pragma auto_inline(on)
int functionToBeInlined()
{
//.....
}
#pragma auto_inline(off)

Все вхождения вышеупомянутой функции будут встроены.

ссылка на прагму компилятора VC ++

у каждого компилятора есть свои специфические прагмы

...