this post was submitted on 22 Mar 2024
120 points (90.5% liked)

Programmer Humor

19555 readers
1146 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] Scoopta 39 points 7 months ago (3 children)

I really wish more projects would use .hpp to differentiate from C headers. It's really annoying to have a single header extension blend across two incompatible languages.

[–] [email protected] 19 points 7 months ago (1 children)

I did this in a project and someone later came and changed them all to .h, because that was "the convention" and because "any C is valid C++". Obviously neither of those things is true and I am constantly befuddled by people's use of the word convention to mean "something some people do". It didn't seem worth the argument though.

[–] Scoopta 14 points 7 months ago (1 children)

...so that leads to another annoyance of mine. The insistence that there aren't two languages but indeed one named C/C++. Obviously I'm being a bit sarcastic but people blur the lines HEAVILY and it drives me crazy. Most of the C code I've written is not compatible with C++...at least not without a lot of type casting at a bare minimum. Or a compiler flag to disable that. Never mind the other differences. And then there's the restrict keyword, and the ABI problems if the C library you're using doesn't extern C in the headers...etc etc... -_-

[–] [email protected] 4 points 7 months ago* (last edited 7 months ago) (1 children)

Yeah, I use that all the time. I think I use it in a different way though. I have projects with C, C++ and other languages. The C and C++ get compiled and linked together, and so there are some considerations for those files that don't apply to anything else. So I mean C files and C++ files, but not as if they were the same language.

[–] Scoopta 3 points 7 months ago (1 children)

Yeah that's completely fair and makes sense to me. I just know I've come across stuff where people are talking about it like they're the same language. This seems to be especially prevalent in windows development where the C support is pretty poor in comparison and tends to kinda be lumped into into C++.

[–] [email protected] 1 points 7 months ago (1 children)

Projects for Apple platforms usually also use .h, where it could mean anything from C/C++ to Objective-C/C++.

In practice, Clang handles mixed C/C++/Obj-C codebases pretty well and determining the language for a header never really felt like an issue since the API would usually already imply it (declaring a C++ class and/or Obj-C class would require the corresponding language to consume it).

If a C++ header is intended to be consumed from C, adding the usual #ifdef __cplusplus extern "C" {... should alleviate the name mangling issues.

[–] Scoopta 1 points 7 months ago

Yeah, I was ignoring apple platforms because Objective-C doesn't even have its own header extension as an option. Also not all C headers do extern stuff...and it doesn't fix 100% of compatibility problems when you do that anyway. Also I'm not really talking about it from a compiler perspective, I'm talking about it from an organization and human perspective. I know compilers generally don't care...which is exactly how we ended up in this predicament.

[–] [email protected] 1 points 7 months ago (1 children)

reminder that .H can be used as a c++ header extension , along with .C for source files

[–] Scoopta 1 points 7 months ago (1 children)

Yep which IMO is ugly but I'd way prefer that over everyone using .h

[–] [email protected] 1 points 7 months ago (1 children)

honestly I use .hh/.cc which is quite nice IMO . you can also use .hpp/.cpp but I don't like it personally

[–] Scoopta 1 points 7 months ago

Yeah. My original comment should have been "I wish people would use a C++ specific extension for headers." I just picked hpp because cpp seems to be the most widely used C++ extension.

[–] [email protected] -3 points 7 months ago (2 children)
[–] Scoopta 3 points 7 months ago* (last edited 7 months ago)

It's actually not. Objective-C is a superset of C. C++ is not. It's MOSTLY compatible...but it's not a superset. See the restrict keyword, or the need for casting to and from void*, or the inability to name variables new or delete, or class, or this. I can't count how many C projects I have which use this as a variable name that WILL NOT compile as C++...or the need for extern C to call C ABI code...in no way is it a superset

EDIT: lol, you can downvote me if you want but I think you need to lookup what a superset is

[–] [email protected] 2 points 7 months ago

hpp is a superset of h