编辑“︁
Pragma once
”︁(章节)
跳转到导航
跳转到搜索
脚本错误:没有“Mainspace editnotice”这个模块。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 優缺點 == 使用<code>#pragma once</code>代替include防範將加快編譯速度,因為這是一種高階的機制;[[編譯器]]會自動比對檔案名稱或[[inode]]而不需要在[[標頭檔]]去判斷<code>#ifndef</code>和<code>#endif</code>。 另一方面,部份編譯器,例如[[GCC]]、[[clang]]等,也包含特別的程式碼來識別和有效率的管理include防範。因此使用<code>#pragma once</code>并不会得到明显的加速。<ref>{{cite web |url=http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC8 |title=The C Preprocessor: 1. The C Preprocessor |publisher=Gcc.gnu.org |date=1996-02-01 |accessdate=2013-08-19 |archive-date=2013-08-07 |archive-url=https://web.archive.org/web/20130807225104/http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC8 |dead-url=no }}</ref><ref>{{cite web |url=http://clang.llvm.org/docs/InternalsManual.html#multipleincludeopt |title=“Clang”CFE Internals Manual—Clang 3.4 documentation |publisher=Clang.llvm.org |date= |accessdate=2013-08-19 |archive-date=2013-08-06 |archive-url=https://web.archive.org/web/20130806185452/http://clang.llvm.org/docs/InternalsManual.html#multipleincludeopt |dead-url=no }}</ref><ref>{{cite web |url=http://clang.llvm.org/doxygen/group__CINDEX__FILES.html#ga1969fe907a40d9469ea68c370d0f602a |title=clang: File manipulation routines |publisher=Clang.llvm.org |date= |accessdate=2013-08-19 |archive-date=2013-11-11 |archive-url=https://web.archive.org/web/20131111172201/http://clang.llvm.org/doxygen/group__CINDEX__FILES.html#ga1969fe907a40d9469ea68c370d0f602a |dead-url=no }}</ref> 此外,因為編譯器自己必須承擔管理<code>#pragma once</code>,它不必定義新的指令名稱,例如在[[include防範]]文章範例的<code>H_GRANDFATHER</code>。這能排除名稱碰撞的風險,意思就是至少第一次包含標頭檔不會再有'''錯誤'''。 然而,這種高階的管理有好也有壞;設計者必須依賴編譯器正確的管理<code>#pragma once</code>。編譯器如果犯錯,例如沒有辨認出在相同檔案中的兩個不同[[符號連結]]名稱指標,此時編譯會錯誤。編譯器對於<code>#pragma once</code>可能包含相關的bug [[LCC-Win32]] 2004年[http://groups.google.com/groups?selm=bvjqhn$q5o$1@news-reader1.wanadoo.fr][http://groups.google.com/groups?selm=488cbfe1.0304061213.264d94d@posting.google.com]和GCC 1998年。[http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC8]{{Wayback|url=http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC8 |date=20070425203334 }}2005年,GCC文件中將<code>#pragma once</code>列為「已淘汰」的特性。[http://gcc.gnu.org/onlinedocs/gcc-4.0.3/cpp/Obsolete-once_002donly-headers.html#Obsolete-once_002donly-headers]{{Wayback|url=http://gcc.gnu.org/onlinedocs/gcc-4.0.3/cpp/Obsolete-once_002donly-headers.html#Obsolete-once_002donly-headers |date=20070102011354 }}随着gcc 3.4的发布,gcc解决了#pragma once中的一些问题(主要是跟符号链接和硬链接有关),并且去掉了#pragma once的“已淘汰”的标签。[http://gcc.gnu.org/gcc-3.4/changes.html]{{Wayback|url=http://gcc.gnu.org/gcc-3.4/changes.html |date=20100710060842 }}
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息