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

问题描述 投票:1回答:5

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

c ada pragma
5个回答
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,DEFAULT之一。

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

正如Samuel Klatchko所指出的那样,还有非标准的pragma。

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

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


4
投票

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

这是gcc pragmas的一页和Microsoft VC pragmas的另一页。


3
投票

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


3
投票

...for the Pragmatic programmer ;-)


`#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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.