世界上存在 與規範完全一致 的 C 編譯器 直譯器嗎?

時間 2021-05-06 03:21:57

1樓:

在沒有形式化規範的前提下,是沒法嚴格的判斷乙個編譯器實現的語言是否滿足語言的規範,最多只能通過不斷的測試做近似判斷。有了形式化規範,才有可能通過形式化方法構造和證明乙個滿足規範的編譯器,例如 compcert。但是即使是compcert這樣只實現了乙個 c 的子集的編譯器,證明其滿足規範也不是一件容易的事,至少證明所花費的人月是遠遠大於目前實際使用的編譯器的開發開銷的。

退一步講構造形式化語言規範:對於c++這樣從頭至尾沒有考慮過形式化且又如此複雜的語言,回過頭來從其非形式化規範構造形式化規範是一件幾乎不可能的事情 (但是學術界仍然有人在不斷努力),更勿論非形式化規範中可能的前後矛盾。

2樓:藍色

C++有很多的特性,標準條款也有很多,設計乙個完全符合標準的C++編譯器是一件非常非常困難的事情。

與此同時,C++標準也有很多未定義的行為,即交給編譯器自己去決定。而這個時候就會出現編譯器設計人員理解不同的情況了,於是就會有不同編譯器不同表現行為。然而,很多時候程式設計師往往會以他熟悉的編譯器作為基準,若其它編譯器與這個編譯器表現不一致就說其它編譯器有Bug,不符合標準,這其實是一種誤解。

很多時候,其它編譯器在某個平台上的策略是盡量相容這個平台的主流編譯器,如編譯選項,C++ Object Model等,所以我們經常會看見在Linux平台下的編譯器都會宣稱是否相容GCC編譯器,或者說相容了GCC編譯器多少。而在Windows平台下,則是是否相容VC++編譯器,如Intel C++編譯器就是乙個例子。

而除掉未定義的行為,一些C++特性實現起來也是極為繁瑣與困難,如C++14 constexpr,模板等。很多情況下,小的例子也是完全體現不出來的,當特性一綜合很容易就崩了,這一點在模板方面體現的尤為突出。所以,我們即使作為編譯器開發者,測試一些特性的時候也是以通過某某Test Buckets達到多少通過率就可以認為是合格了,比如對Boost的測試,目前幾乎所有的編譯器都是95%左右的通過率。

所以,這需要怎麼看待這個完全符合規範一說,非要嚴格的說,如要求100%支援並且通過相關測試集,以我目前的認知來看,很遺憾,沒有。

3樓:

所謂規範,本來就是幾個開發商做下來相互扯皮的結果,我做了功能A,你做了功能B,他做了功能C,然後我們博弈一下,AB聯合坑了C,AB都進標準,回家各自再完善。C被宣布為非法,回家捲鋪蓋……

4樓:高天

這個問題雖然我沒有確切地證實過,不過我大膽地猜測答案肯定是:不存在。

因為C/C++ standard規定了一些說起來很輕鬆,實現起來很費勁,又沒什麼人在乎的東西。

C++就不說了,自從引入了Template,compiler bug就層出不窮,雖然也沒什麼人在乎。

哪怕是C的compiler都沒法做的完全符合標準。

舉個例子,既然有人提到GNU了。

C standard裡有個函式叫做mktime(),在time.h裡。這個函式把乙個struct tm變成乙個秒數。

c99 standard規定,如果struct tm裡面(乙個struct裡面寫的年份,月份,天數之類的)的資料是不合法的,要把他變成合法,然後計算。比如我寫69年12月和70年-1月效果是一樣的。然後我寫8點0分和9點-60分是一樣的。

好了,我們都知道mktime絕大部分實現是通過小時*3600+分鐘*60+秒實現最後的秒數計算的。換言之如果小時×3600溢位了超過2個time_t,這個秒數就基本肯定錯了(絕大部分情況是報溢位)。

比如小時=INT_MAX/60, 分鐘=(INT_MAX/60)*60。理論上說這個結果應該和小時分鐘都為0是一樣的。但是實際計算結果不是。

這就是不符合standard的地方。(測試平台ubuntu 14.04,gnu4.

8.2,with -m32 on 64-bit OS,如果time_t是64bit,就木有這個問題了。不過我猜這個問題你應該找不到compiler解決了)。

5樓:馮東

程式都是有 bug 的。規範經過不同組織解釋都是有差異的。工程投入都是有限的。從這三點來看,存在完全符合標準的東西幾乎不可能。

世界觀完全一致的人價值觀是否也一致呢?

成雪 沒有完全相同的兩片葉子。也沒有完全相同的兩種想法。即使是所有人都覺得,哇我男神好帥,但是每人眼裡的帥也是不同定義的。有的人覺得比自己好看就是帥,有人覺得盛世美顏才稱得上帥。所以即使是同歸,開始也是殊途。所以完全一致應該沒可能。但是可以相似,而且相似的可能性更高。這種我往往稱之為,三觀相合,不是...

假設存在無窮多氦氣,各處物理性質完全一致(溫度 壓強等)。可以估算氦氣熱輻射產生的輻射能密度嗎?

宮非 2021 01 13 你所提問的輻射能密度,究竟是 能流密度,energy flux density,W m2 還是 能量密度,energy density,J m3 我想大部分的人都是傻傻地分不清楚吧,包括我!在電磁學中,能量密度 是指在一定的空間或質量物質中儲存能量的大小,能流密度 指一定...

特里斯坦湯普森與勇士格林續約價碼完全一致,未來五年,這兩人你更看好哪乙個?他們的合同值得麼?

肖恩 雖然有點事後諸葛亮,但是事實證明追夢已經打出比他身價還要高的水平,而且沒有停止進步,應該說有極大的進步,勇士已經不能沒有他了,而TT還是那個樣子,PS 能力上限再高也比不過一顆永遠不願停止進步的心 耶穌佛祖 多少拿了大合同之後就變懶變爛的球員還少麼?不要和我說tt還年輕上賽季騎士是因為勒夫和瓦...