任何人都可以告诉我在C和Ada中使用pragma,如果可能的话还有一些例子。
答案 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
每个编译器都有自己的特定编译指示