2017-06-15 53 views
2

的#pragma启动的#pragma退出的:这些指令可以帮助我们来指定需要的程序运行之前 启动功能(控制越过前到main())和程序 退出之前(就在控制从main()返回之前)。用例的#pragma开始和#pragma退出

任何人都可以向我推荐这些预处理器指令的任何用例吗?

恐怕这些在面向对象编程中的用例可能非常有限。有没有人发现它在项目中使用?

+1

我同意。你也可以创建一个对象的静态实例。在从main返回之后,构造函数在进入main和析构函数之前也会被调用。 –

+1

我已经看到(C和汇编程序)代码在main(并且实际上在/之前/而不是crt)之前执行,当它执行不能等待crt(有时冗长)活动的事情时。然而,“有龙”。 – Yunnosch

+0

这似乎取自Karthik Byggari的博客。我会无视他的;他仍然在谈论20世纪的“Turbo C”编译器这一事实表明了今天的相关性。 – MSalters

回答

2

关于这些指令最重要的部分是能够为在main之前/之后调用的函数指定优先级。这很方便克服"static initialization order fiasco"。 对第二个问题的回答:不,我没有看到这些指令在实际应用程序中使用。

+0

'#pragma start'指令*会真的解决这个问题吗?看起来好像它只是将罐子放在街上。此外,在我初始化全局静态之前,'#pragma start'实际上运行代码*似乎令人怀疑。但是我找不到任何支持这些的编译器,所以我找不到任何关于它们的文档。 –

0

为了避免在注释给予(即使是部分)的答案,我有助于这个观点:

我看到(C和汇编)在实时系统中的代码,前主(和实际前正在执行/而不是crt),当它做的事情不能等待crt的(有时是冗长的)活动。然而,“有龙”。

0

恕我直言,这是编码准则之一,应该指示这种决定。如果您可以使用特定编译器提供的这些扩展名,那么您就可以开始使用。但是,如果重点是编写标准代码,那么应该使用标准功能。

Implementation defined behavior control,来自CPP参考,是寻找标准支持的良好开端。

从C++的角度来看,预处理器的使用根本不被认为是一种好的做法(尽管在某些情况下它是不可避免的)。它的使用保持最小。尽管如此,一些项目使用它,这是他们的决定。

从个人经验来看,我从未在任何项目中使用/看过任何这些pragma