- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。
9年前关闭。
我一直不明白 #pragma once
的需要当 #ifndef #define #endif
总是有效。
我看过#pragma comment
的用法与其他文件链接,但使用 IDE 设置编译器设置更容易。#pragma
还有哪些其他用法?这很有用,但并不广为人知?
编辑:
我不仅仅是在#pragma 指令列表之后。或许我应该重新表述一下这个问题:
你用 #pragma
写了什么代码你觉得有用吗?
.
答案一目了然:
感谢所有回答和/或评论的人。以下是我发现有用的一些输入的摘要:
#pragma once
或 #ifndef #define #endif
将允许在大型系统上更快地编译。史蒂夫加入并支持这一点。 #pragma once
MSVC 首选,而 GCC 编译器针对 #ifndef #define #endif
进行了优化.因此,应该使用其中之一,而不是两者都使用。 #pragma pack
为了二进制兼容性,Clifford 反对这一点,因为可能存在可移植性和字节序问题。 Evan 提供了示例代码,Dennis 告知大多数编译器将强制执行填充以进行对齐。 #pragma warning
隔离真正的问题,并禁用已经审查过的警告。 #pragma comment(lib, header)
以便在项目之间轻松移植,而无需再次重新设置您的 IDE。当然,这不是太便携。 #pragma message
VC 用户输出带有行号信息的消息的技巧。 James 更进一步,允许 error
或 warning
匹配 MSVC 的消息,并将适本地显示,例如错误列表。 #pragma region
能够在 MSVC 中使用自定义消息折叠代码。 #pragma
.荣誉。 最佳答案
每个 pragma 都有其用途,否则它们一开始就不会存在。
如果您知道不会将代码移植到不同的编译器,则编译指示“一次”只是减少输入和整理。它也应该更有效,因为编译器根本不需要解析头来确定是否包含其内容。
编辑:回答评论:假设您有一个 200kB 的头文件。使用“once”,编译器加载一次,然后知道它不需要在下次看到引用时包含头文件。使用 #if 它必须每次加载和解析整个文件以确定所有代码都被 if 禁用,因为每次都必须评估 if。在大型代码库中,这可能会产生显着差异,尽管在实际中(尤其是预编译头)可能不会。
当您需要结构的二进制兼容性时,pragma "pack"是无价的。
编辑:对于二进制格式,您提供的字节必须与所需的格式完全匹配 - 如果您的编译器添加了一些填充,它会搞砸数据对齐并破坏数据。因此,对于序列化为二进制文件格式或您希望传入/传出操作系统调用或 TCP 数据包的内存结构,使用直接映射到二进制格式的结构比“成员序列化”更有效(一个接一个地编写字段)-它使用更少的代码并且运行得更快(即使在今天,嵌入式应用程序中也是必不可少的)。
pragma "error"和 "message"非常方便,尤其是在条件编译块中(例如“错误:'Release for ePhone' 版本未实现”,消息:“在此版本中启用了额外的调试和分析代码”)
pragma "warning"(尤其是 push & pop)对于暂时禁用恼人的警告非常有用,尤其是在包含写得不好的第三方 header (充满警告)时 - 特别是如果您使用警告级别 4 构建。
编辑:好的做法是在构建中实现零警告,以便在出现警告时您会注意到它并立即修复它。您当然应该在自己的代码中修复所有警告。但是,有些警告根本无法修复,并且不会告诉您任何重要信息。此外,在使用第三方库时,您无法更改其代码来修复警告,您可以通过禁用库的警告来从构建中删除“垃圾邮件”。使用 push/pop 允许您仅在库包含期间有选择地禁用警告,以便编译器仍然检查您自己的代码。
关于c++ - 您使用#pragma 编写的哪些代码有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2703528/
当我开始学习一门新语言时,我总是觉得我没有以实用、标准的方式进行学习。所以这里有一个关于 jQuery 的问题以及我所做的是否可以接受。 我有 3 张图片。 然后我让 jQuery 检测 $('
基本上,我想知道线程是否有用或必要,或者可能更具体地说,您将使用它的用途和情况。我对线程了解不多,也从未使用过它(我主要使用 C#),并且想知道如果使用它们是否会提高性能或稳定性。如果有人愿意解释一下
这个问题在这里已经有了答案: What is The Rule of Three? (8 个答案) 关闭 7 年前。 嘿嘿。我有一个让我很难过的问题。我自定义了一个普通的拷贝构造函数但它只在我初始化
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Uses for multiple levels of pointer dereferences? 我在 C
我不确定异常在每种语言中的工作方式是否相同,但我使用的是 PHP,我想知道我什么时候做这样的事情: if (!$this->connection[0]->query($this->query)) t
Scala native 是最近发布的,但是他们(现在)使用的垃圾收集器非常rudimentary,因此不适合严肃使用。 所以我想知道:为什么不只将Scala转换为Go (即Scala.js)?这将是
最近,我一直在研究docker及其对SaaS公司的有用性。我花了一些时间学习如何容器化应用程序,并简要了解了什么是docker和容器。我在理解这项技术的实用性时遇到了一些问题。我看过dockercon
我必须根据出现在它们之前的字符串是否是某个关键字“load”从输入文件中读取整数。没有关键数字告诉我们要输入多少个数字。这些数字必须保存到一个数组中。为了避免为扫描的每个附加数字创建和更新新数组,我想
Deferred 对象具有回调池 doneCallbacks、failCallbacks 和 progressCallbacks。 doneCallbacks 和 failCallbacks(以及方法
这个问题在这里已经有了答案: Is there a case where including the same header twice is actually helpful? (6 个答案) 关
我在C++ Programming Language的书上看到了下面的例子 class Ptr { X* operator->( ); }; voide f(Ptr p) { p-
你能不能: template const T &operator[] (unsigned int x) 我的想法是如果你有一个 map如果有一个包装器类可以让您这样做,那就太好了: obj["Int
根据doc这个tutorial , cmp() returns -1 if x y 教程里也说了 cmp() returns the sign of the difference of two nu
我经常读到 It seem that identity monad is useless. It's not... but that's another topic. 那么谁能告诉我它有什么用? 最佳
我已经知道实现和接口(interface)的基础知识。我不明白什么时候使用接口(interface)。有接口(interface)的要求是什么? 例子: /// Interface demo Inte
在一些 R 函数的主体中,例如 lm,我看到对 match.call 函数的调用。正如其帮助页面所述,当在函数内部使用 match.call 时,会返回指定参数名称的调用;这对于将大量参数传递给另一个
在监督学习中,我有典型的训练/测试分割来学习算法,例如回归或分类。关于无监督学习,我的问题是:训练/测试分割是否必要且有用?如果是,为什么? 最佳答案 这取决于问题、数据集的形式以及用于解决特定问题的
我最近接触到 Javascript 模板并变得非常感兴趣。 我正在使用 MVC 模式构建一个大型 PHP 应用程序。模板由相当棒的 Twig 处理. 我最近遇到了一个 javascript imple
我最近在一个我要重构并拥有的项目中遇到了以下代码行: SomeClass someClass = new SomeClass(); 我这辈子都想不通为什么有人会以这种方式使用泛型。我想出的唯一原因是
亲爱的,我正在阅读这篇关于通过 asp.net 4 中的代码动态添加元标记的帖子 - 但我想问一下对 SEO 有什么好处,静态添加它或者在代码后面添加它没有问题 http://weblogs.asp.
我是一名优秀的程序员,十分优秀!