簡體   English   中英

C和C ++中類型的互操作性

[英]Interoperability of types in C and C++

一個非常簡單的問題:在同一系統上,是否有任何保證C int與C ++ int是同一個東西?

毫無疑問,這當然是純粹的理論問題。

C和C ++標准使用相同的語言來定義基本類型。 但Fortran 2003明確表示

use ISO_C_BINDING
integer(kind=c_int) :: i

聲明一個與“伴隨C處理器”上的int類型兼容的整數類型,我在C ++標准中找不到任何這樣的斷言。 Fortran提供比C ++更強大的C互操作性保證似乎很奇怪!

我能找到的最接近的是7.5節[dcl.link],C ++ 11標准的第3段,其中指出了這一點

每個實現都應提供與用C編程語言編寫的函數的鏈接

但是這個小句子(對我而言)似乎不足以保證基本類型的兼容性。

C ++標准中是否有其他一些我忽略的語言可以保證這一點,或者它是否顯然被認為是理所當然的,沒有人打擾明確說明它?

編輯 :大衛施瓦茨在評論中指出,當我說“同一系統”時,我是不精確的。 我真的是指同一個“平台”,即硬件,操作系統,系統庫等。當然,它確實是一個ABI問題。 在引用的段落中,C ++標准似乎想表明你可以使用extern "C"調用C函數,但我不確定它是否提供了足夠的其他保證?

沒有。

在x64 amd兼容的cpus上廣泛使用的符合編譯器,默認情況下long 32位,其他為64位。 因此,對於同一系統上的兩個C ++編譯器來說,情況甚至不是這樣,更不用說C ++和C編譯器了。

在一個編譯器中,如果它們兼容,則由編譯器供應商決定。 他們通常(總是)。 “一個編譯器”在這里有點用詞:C snd C ++編譯器是不同的編譯器,即使在同一個供應商的同一個二進制文件中,在某種意義上。

暫無
暫無

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

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