草庐IT

c++ - #pragma once 进入头守卫的原因是什么?

刚刚在里面看到了这个#ifndefBOOST_ASIO_HPP#defineBOOST_ASIO_HPP#ifdefined(_MSC_VER)&&(_MSC_VER>=1200)#pragmaonce#endif//defined(_MSC_VER)&&(_MSC_VER>=1200)///....#endif//BOOST_ASIO_HPP忽略_MSC_VER预处理器检查,拥有#pragmaonce有什么好处?在这种情况下?预处理器header保护是否确保在所有情况下和所有平台上,header内容仅是included一次? 最佳答案

c++ - #pragma 有什么用?

谁能帮我理解#pragma?ifndefTARGET_OS_LINUX#pragmaonceendif什么,何时,何地,为什么,一个例子?以上是我正在重构的一些代码...... 最佳答案 #pragma只是编译器特定功能的前缀。在这种情况下,#pragmaonce意味着这个头文件只会在特定的目标文件中包含一次。它消除了对includeguards的需求. 关于c++-#pragma有什么用?,我们在StackOverflow上找到一个类似的问题: https:

C++:#pragma comment(lib, "XXX") 实际上对 "XXX"做了什么?

我的背景是C#,但我必须维护一些遗留(MS)C++。在那个代码库中我偶然发现:#pragmacomment(lib,"OtherLib700.lib")其中700是一些版本控制。另外lib是一个同名的DLL。我最初认为该程序将依赖于DLL,但在将其从系统中删除后,该程序仍然可以工作。不过,还有一个更新版本的DLL,名为OtherLib900...似乎程序“包含”了lib的代码,因此它不再依赖于外部DLL。(或者程序“自动”使用较新的DLL...)哪一个是正确的?有没有办法进一步证实“假设”? 最佳答案 那个pragma用于链接到指定

c++ - 如何使用#pragma message() 使消息指向文件(lineno)?

为了在我的代码中添加“待办事项”项,我想在编译器输出中添加一条消息。我希望它看起来像这样:c:/temp/main.cpp(104):TODO-addcodetoimplementthis为了利用VisualStudio构建输出功能通过双击导航到相应的行。但__LINE__宏似乎扩展为一个int,不允许写入#pragmamessage(__FILE__"("__LINE__"):...")还有其他方法吗? 最佳答案 这是一个允许您单击输出Pane的工具:(那里还有其他一些不错的提示)http://www.highprogrammer

c++ - 我还应该使用#include guard 和#pragma 一次吗?

http://en.wikipedia.org/wiki/Pragma_once当所有这些编译器都支持#pragmaonce时,我还应该使用包含防护吗?很多关于堆栈溢出的响应都说要同时使用两者以实现兼容性,但我不确定这是否仍然正确。现在有哪些编译器不支持#pragmaonce?我不确定这两种方法在被广泛采用之前是否只是一个建议,或者是否仍有充分的理由同时使用这两种方法。仅使用#pragmaonce会导致问题的任何示例? 最佳答案 这取决于您的程序的可移植性。只要您编写的程序应该与您知道肯定支持#pramaonce的编译器一起工作,只

c++ - 如何禁用#pragma 警告?

在开发C++应用程序时,我不得不使用第三方库,它会产生大量与正在使用的无害#pragma指令相关的警告。../File.hpp:1:warning:ignoring#pragmaidentInfileincludedfrom../File2.hpp:47,from../File3.hpp:57,fromFile4.h:49,是否可以在使用GNUC++编译器时禁用此类警告? 最佳答案 相信你可以用编译-Wno-unknown-pragmas压制这些。 关于c++-如何禁用#pragma警告

c++ - 为什么 C/C+ +'s "#pragma once"不是 ISO 标准?

我目前正在做一个大项目,维护所有这些包括guard让我抓狂!手写是令人沮丧的浪费时间。尽管许多编辑器可以生成包含守卫,但这并没有多大帮助:编辑器根据文件名生成保护符号。当您在不同目录中具有相同文件名的header时,会出现此问题。他们都将获得相同的包括后卫。将目录结构包含在保护符号中需要编辑器采取一些奇特的方法,因为宏中的斜杠和反斜杠并不是最好的选择。当我必须重命名文件时,我也应该重命名所有包含保护(在ifndef中,定义最好是endif的注释)。烦人。预处理器充斥着大量符号,却不知道它们的含义。尽管定义被包含一次,编译器仍然会在每次遇到头包含时打开头。包含守卫不适合命名空间或模板。事

c++ - 使用#pragma warning push/pop 是临时改变警告级别的正确方法吗?

有时很难编写完全不会发出警告的C++代码。然而,启用警告是个好主意。因此,通常需要禁用围绕某些特定构造的警告,并在所有其他代码段中启用它们。到目前为止,我已经看到了两种方法。第一种是使用#pragmawarning(push)和#pragmawarning(pop):#pragmawarning(push)#pragmawarning(disable:ThatWarning)//codewithThatWarninghere#pragmawarning(pop)第二种是使用#pragmawarning(default):#pragmawarning(disable:ThatWarnin

c++ - 为什么不自动假定#pragma 一次?

告诉编译器只包含一次文件有什么意义?默认情况下没有意义吗?是否有任何理由多次包含一个文件?为什么不只是假设呢?是否与特定硬件有关? 最佳答案 这里有多个相关问题:为什么#pragmaonce不自动执行?因为在某些情况下,您希望多次包含文件。为什么要多次包含一个文件?其他答案(Boost.Preprocessor,X-Macros,包括数据文件)中给出了几个原因。我想添加一个“避免代码重复”的特定示例:OpenFOAM鼓励一种风格,其中#include在函数中使用点点滴滴是一个常见概念。参见示例this讨论。好的,但为什么它不是默认的

c++ - "pragma"这个词是怎么来的?

所以我知道pragma是什么以及它的用途,但是这个词本身的含义是什么?我在代码中多次使用它,但我从来不知道这个词的真正含义或代表什么。 最佳答案 根据描述Ada设计的美国政府拥有的(!)文件:RationalefortheDesignoftheAda®ProgrammingLanguage:Apragma(fromtheGreekwordmeaningaction)isusedtodirecttheactionsofthecompilerinparticularways,buthasnoeffectonthesemanticsofa