簡體   English   中英

需要對來自 Go Lang 的聲明進行驗證

[英]Need validation on a claim from Go Lang

我最近一直在研究 GoLang——來自 C++ 背景——我正在閱讀一篇論文,據稱解釋了制作 Golang 背后的原因,這里是它的鏈接: https://talks.golang.org/2012/splash.article

索賠之一是,處理 C 和 C++ 中的依賴項(包)是痛苦的,並且對 state 采取#ifndef保護實例

目的是 C 預處理器讀取文件,但忽略文件的第二次和后續讀取的內容......

我參考了 GCC 頁面, https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.ZFC35FDC70D5FC69D2698Z83A822C7A53.E

因此,如果 header 文件出現在隨后的 #include 指令中並且定義了 FOO ,則它會被忽略,並且不會預處理甚至第二次重新打開文件

Go:“讀取並忽略”與 GCC:它不會預處理甚至第二次重新打開文件。

不矛盾嗎?

感謝您的想法。 感謝您閱讀我的問題。

第一段是討論通用編譯器,從概念上講,它應該讀取文件的內容並忽略內容(因為它們是#ifdef d out)。 也就是說,粗略地說,C 標准指定編譯器應該做什么。

但實際上 C 標准中的所有內容都在“好像”規則之下——編譯器實際上不必按照標准中建議的方式實現,只要它產生的最終結果在每種情況下都完全相同。 因此,GCC 的特定實現添加了一個優化,在它可以確定文件的內容將被忽略的情況下,它實際上並沒有讀取它。 這很好,因為它仍然表現得好像它已經讀取了文件但忽略了它。

請注意,其他編譯器不一定會這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM