Skip to main content

Posts

Showing posts with the label C++

What is the size of an empty object?

Consider a class like the one above. Commonly called an "empty class," this class has no internal variables. So, how big is this empty class? At first glance, the size should be 0 since there are no member variables. However, the size is never 0 in any language, whether Java, C#, C (in this case, a struct), or C++. This is to ensure that two different objects never have the same address. Empty classes typically have a size of 1 byte in a 32-bit environment and 2 bytes in a 64-bit environment. However, the exact size cannot be determined. According to the specification, the size just needs to be non-zero. The precise size depends on the implementation. This is a translation of my old Korean post written in 2015. Because the size can vary depending on the implementation, it is now possible to have different sizes (although still not 0). And Languages like Rust have even introduced zero-sized types . We will look at this topic in more detail at a future opportunity.

C is Not a Subset of C++

I came across an absurd article. A well-written C program is a C++ program. Therefore, a well-written C program should be compilable with a C++ compiler. This statement was undoubtedly true before 1999. Bjarne Stroustrup definitely took C compatibility into account when creating C++. At that time, well-written C code that adhered to the ANSI C standard was correctly compiled with a C++ compiler. However, that's limited to the time before the release of C99. C99 introduced various new features, which C++ had already implemented differently or did not consider necessary. Moreover, the release of the new C11 standard and the new C++ standards(C++03, C++11, and more) have widened the gap between the two languages to a point where it is practically impossible to bridge. Code that follows the C89 standard can still be compiled with a C++ compiler. But how many programs nowadays use C89? Try to find an actively developed project that uses C89. I have never tried to find one. So,...