[cfe-dev] [libc++abi] use of <stddef.h> vs. <cstddef> etc.

Florian Kutscherauer florian.kutscherauer at gmx.at
Wed Oct 16 12:32:41 PDT 2013


Hi G M,


thank you for your quick response.

G M wrote:
> Hi Florian
>
> Florian Kutscherauer wrote:
>> I've noticed that some of the C++ files (both headers and bodies)
>> include C-headers, like <stddef.h>, <assert.h> etc., while others use
>> the corresponding C++-headers, like <cstddef>, <cassert>, and so on.
>>
>> So, I was wondering [what] the reason for that might be:  Is this
>> just out of habit and custom, or is there more to it?
>
> I think in general you'd want to use the C++ headers, not the C
> headers I.e. prefer cstdio over stdio.h.

I agree, and that is precisely why I was wondering.

> One exception is when coding inside of libcxx itself (as opposed to
> using it). There you are usually implementing the C++ header itself
> and including the C header is often the necessary thing to do for one
> reason or another. Sometimes though it might be it's own C++ header
> that it needs to reference depending on the case in question.

Of course.  And in such a case I fully understand the reasons for 
including a C-header.  What puzzled me was the use of those C-headers in 
C++-files outside of libc++ (in this case: libc++abi).

> You might of course want to reference the C header if the header file
> is going to be compiled by a C compiler instead of a C++ one.
>
> Generally it's quite a common case is that people use the C headers in
> C++ by mistake or occasionally because of some compatibility problem
> they are trying to avoid.

The reason for asking was to find out precisely which one of those 
caused the C-headers in libc++abi to be used.

> The Ninja project is one where I see a lot of C references that I
> think could be changed to C++ but that was actively refused when I
> suggested it.

Some people are truly religious about their coding-styles...

> So I don't know all the reasons why people do this but it's quite
> common. I'd generally stick to the rule if your code is in a c++
> program and you're not aware of any problem or trying to share the
> header with a C program, use the C++ headers, sometimes they provide
> useful overloads of similar functions in the C headers.

My thoughts, exactly.

> Sometimes they can conflict too (he says with one such example in
> mind, coming to a forum near you soon lol)



More information about the cfe-dev mailing list