A very simple question: are there any guarantees that a C int
is the same thing as a C++ int
, on the same system?
It goes without saying that this is, of course, a purely theoretical question.
The C and C++ standards use the same language to define the fundamental types. But whereas Fortran 2003 makes it clear that
use ISO_C_BINDING
integer(kind=c_int) :: i
declares an integer type which is compatible with the int
type on a "companion C processor", I can't find any such assertion in the C++ stardard. It seems very odd that Fortran would provide stronger C interoperability guarantees than C++!
The closest I can find is section 7.5 [dcl.link], paragraph 3 of the C++11 standard, which states that
Every implementation shall provide for linkage to functions written in the C programming language
But this little sentence doesn't (to me) seem strong enough to guarantee compatibility of fundamental types.
Is there some other language in the C++ standard that I've overlooked which guarantees this, or is it just so obviously taken for granted that no-one has bothered to state it explicitly?
EDIT: David Schwartz in the comments points out that I was imprecise when I said "the same system". I really meant the same "platform", i.e. hardware, OS, system libraries etc. It's really an ABI issue of course. In the quoted passage the C++ standard seems to want to indicate that you can call C functions with extern "C"
, but I'm not sure if it provides enough other guarantees?
If the C++ compiler provides its own versions of the C headers, the versions of those headers used by the C compiler must be compatible. Oracle Developer Studio C and C++ compilers use compatible headers, and use the same C runtime library. They are fully compatible.
C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...
No.
There are widely used conforming compilers on x64 amd compatible cpus that treat long
as 32 bit and others as 64 bit by default. So this is not even the case for two C++ compilers on the same system, let alone a C++ and C compiler.
Within one compiler, that is up to the compiler vendor if they are compatible. They usually (always) are. "one compiler" is a bit of a misnomer here: the C snd C++ compilers are different compilers, even if in the same binary by the same vendor, in a sense.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With