问题标签 [pragma]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 你用#pragma 编写了哪些代码,你觉得有用?
我从来不明白#pragma once
什么时候#ifndef #define #endif
总是有效的需要。
我已经看到了#pragma comment
与其他文件链接的用法,但是使用 IDE 设置编译器设置更容易。
还有哪些其他#pragma
有用但不广为人知的用法?
编辑:
我不只是在#pragma 指令列表之后。也许我应该重新表述一下这个问题:
你用什么代码写的,#pragma
你觉得有用?
.
答案一目了然:
感谢所有回答和/或评论的人。以下是我认为有用的一些输入的摘要:
- Jason 建议使用
#pragma once
or#ifndef #define #endif
将允许在大型系统上更快地编译。史蒂夫加入并支持这一点。 - 280Z28 领先并提到它
#pragma once
是 MSVC 的首选,而 GCC 编译器针对#ifndef #define #endif
. 因此,一个人应该使用其中之一,而不是两者。 - Jason 还提到
#pragma pack
了二进制兼容性,而 Clifford 反对这一点,因为可能存在可移植性和字节序问题。Evan 提供了一个示例代码,Dennis 告知大多数编译器将强制填充对齐。 - sblom 建议使用
#pragma warning
来隔离真正的问题,并禁用已经审查过的警告。 - Evan 建议
#pragma comment(lib, header)
在项目之间轻松移植,而无需再次重新设置 IDE。当然,这不是太便携。 - sbi
#pragma message
为 VC 用户提供了一个绝妙的技巧来输出带有行号信息的消息。James 更进一步,允许error
或warning
匹配 MSVC 的消息,并将适当地显示,例如错误列表。 - Chris 提供
#pragma region
了能够在 MSVC 中使用自定义消息折叠代码。
哇,等一下,如果我想发布关于不使用#pragmas 的帖子,除非必要,该怎么办?
- 从另一个角度看克利福贴一下不要用
#pragma
。荣誉。
如果 SOers 有发布答案的冲动,我将在此列表中添加更多内容。感谢大家!
c - 各种编译器中的编译指示 swp、ivdep、预取支持
在良好的 Altix 手册(altix_single_cpu_optimization http://wwwuser.gwdg.de/~parallel/parallelrechner/altix_documentation/altix_single_cpu_optimization.pdf)中,我找到了这个用于优化编译器的 pragmas-hints 列表
哪些编译器支持这些编译指示?什么实现了链接优化(软件流水线是低 ipc 和低注册数处理器的相当困难的优化之一)?
c# - 我可以以编程方式启用/禁用异常中断吗?
我希望能够在调试时打破异常......就像在 Visual Studio 2008 的菜单调试/异常对话框中一样,除了我的程序在我想要调试的位之前有许多有效的异常。
因此,不是每次都使用对话框手动启用和禁用它,而是可以使用#pragma 或其他方法自动执行它,这样它只发生在特定的代码段中?
visual-studio - 人们如何处理警告 C4793: 'some_function' : 编译为本机的函数?
"warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native"
如果我的 C++ 项目使用 CLR 支持编译,我正在使用 OpenCV 库及其头文件之一 cxoperations.hpp 生成。我可以通过包围 OpenCV 标头来防止警告,如下所示:
但是实际使用 OpenCV 的项目并没有在 CLR 支持下编译,它是一个原生 C++ 静态库。确实具有 CLR 支持并在没有 pragma 语句的情况下生成此警告的项目仅使用此静态库。所以我对这个警告的创建有点惊讶,特别是考虑到整个静态库不是用 CLR 支持编译的,但只有这个头文件会导致问题。
因此,这个解决方案对我来说似乎不是最理想的。这是您处理此警告的方式,还是您可以推荐一个更好的做法?
oracle - 在 Oracle 包体中使用 Pragma
我想在其中创建一个 Oracle 包和两个函数:一个公共函数 ( function_public
) 和一个私有函数 ( function_private
)。公共函数在 sql 语句中使用私有函数。
没有编译指示,代码无法编译 ( PLS-00231: function 'FUNCTION_PRIVATE' may not be used in SQL
)
如果我将WNDS, WNPS
pragma 添加到function_private
. 在我看来 pragma 只能在包声明中使用,不能在包体中使用,所以我也必须function_private
在包中声明:
这个解决方案也让我function_private
公开。是否有解决方案将编译指示添加到只能在包主体中找到的函数?
更新:用一个工作(简化)示例替换了伪代码。
UPDATE2:Rob van Wijk 建议的代码中的错误修复。
sqlite - 何时在 sqlite 上使用编译指示?
何时使用编译指示?
第一次创建数据库还是在每次连接数据库时创建数据库?
c-preprocessor - 定义宏中的编译指示
有没有办法将 pragma 语句与其他语句一起嵌入到宏中?
我正在尝试实现以下目标:
如果存在提升解决方案(除了波浪),我可以接受。
php - 什么可能会在我的响应标头中添加“Pragma:no-cache”?(阿帕奇,PHP)
我有一个网站,我继承了它的维护,这是一个大毛茸茸的烂摊子。
我正在做的一件事是提高性能。除其他外,我正在向Expires
图像添加标题。
现在,有一些图像是通过 PHP 文件提供的,我注意到它们确实有Expires
标题,但它们也每次都被加载。
查看响应标头,我看到了这一点:
这显然解释了这个问题。
现在,我查看了整个代码库,但它在任何地方都没有说“pragma”。.htaccess 似乎也没有任何相关内容。
有什么想法可以设置那些“pragma”(和“cache-control”)标头,我该如何避免呢?
push - 什么禁用了#pragma pack(push)?
我有一个使用 #pragma pack(push,8) 的代码,但它似乎没有以某种方式生效,但我无法弄清楚是什么导致了这个问题。
例如,看下面的代码。
这将返回“数据大小:24”,但我在由 Visual Studio 管理的其他应用程序中使用相同的代码,我得到“数据大小:20”。
所以我假设它与某些设置有关,但无法弄清楚。如果有人能给我一些提示,我将不胜感激。谢谢。
gcc - 使用 Pragma 在 GCC 中删除标志
我想在我的项目中删除一个实用文件的编译器标志。如何使用#pragma
?