任何人都可以告诉我使用pragma语句

时间:2010-04-19 05:06:42

标签: c ada pragma

任何人都可以告诉我在C和Ada中使用pragma,如果可能的话还有一些例子。

5 个答案:

答案 0 :(得分:5)

C99中有三个标准编译指示:

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

'on-off-switch'是其中之一 ON,OFF,DEFAULT。

这些可以在编译时用于以神秘的方式修改编译器的行为(这些与C99浮点行为有关)。该标准为标准pragma保留了STDC;其他人可以使用他们喜欢的任何其他东西。

正如Samuel Klatchko所指出的那样,还存在非标准的编译指示。

基本上,它们是让编译器以半标准方式执行非标准事物的一种方法。一个例子是'#pragma pack',这意味着在成员之间没有填充的情况下创建结构,即使这意味着对这些成员的访问将是次优的(空间比时间更重要,可能)。这不是一个特别好的主意(尽管使用它的人会反对);但这是一个普遍认为的要求,因此编制者经常支持它。

我一直用C语言编写 - 哦,25年,有点多余。我不需要一次使用pragma。我玩过几次玩具,但从来没有真正需要使用它。也许我很幸运。

答案 1 :(得分:4)

在C语言中,大多数编译指示都是特定于编译器/平台的(尽管有一些像#pragma once一样广泛实现)。

以下是gcc pragmas的页面和Microsoft VC pragmas的其他页面。

答案 2 :(得分:3)

...对于务实的程序员; - )


`#pragma'指令是C标准指定的方法,用于向编译器提供附加信息,超出语言本身传达的内容。 1999 C标准规定了该指令的三种形式(通常称为编译指示)。 C编译器可以自由地将其喜欢的任何含义附加到其他编译指示。

  

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

     

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

答案 3 :(得分:3)

在Ada中,“A pragma是编译器指令。”许多语言都是defined,但implementation-defined pragmas是允许的。 Rationale for Ada 2005提供了许多示例。

答案 4 :(得分:0)

您基本上可以将它们视为编译器的命令。这些命令在编译过程中使用。

实施例

#include<windows.h>

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

wmain(){
......
}

在上面的示例中,您基本上要求链接器在链接程序时自动包含shell32.lib。 没有它你必须在cl.exe的命令行中手动指定shell32.lib

另一个例子是 你可以要求编译器在最终的可执行文件中运行...

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

所有出现的上述功能都将被内联。

pragma reference of VC++ compiler

每个编译器都有自己的特定编译指示