VC’s "evil" extension: Pre-definition of basic types


In VC, you may find that you can use “size_t” directly without including any headers.

size_t i = 0;

int main()
{
    atexit(0);
}


However, “size_t” is not a built-in type. It is a typedef in <stddef.h>. So what’s the magic?


In VC compiler, it will include some internal headers for various reasons before compile your code.


For example, “size_t” and “atexit” are introduced in the internal header to support EH (Exception Handling) and RTTI (Run-Time Type Information).


It’s better not to rely on this extension. Whenever you use the types / functions, include the corresponding headers. Otherwise your code will break on other compilers 🙂

Comments (0)