Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

extern “C” works just fine.


Only in certain limited cases, for example, can't have static class instances or anything else that could require calling before a call from "extern C" API.

Also now you have to build enough of a C API to expose the features, extra annoying when you want the API to be fast so it better not involve extra level of indirections through marshalling (hello, KDE SMOKE)

At some point you're either dealing with limited non-C++ API, or you might find yourself doing a lot of the work twice.


Only if your entire API doesn't contain any C++.


C is also C++, at least the C89 subset.



Do you usually post links without reading them?

"In the strict mathematical sense, C isn't a subset of C++. There are programs that are valid C but not valid C++ and even a few ways of writing code that has a different meaning in C and C++. However, C++ supports every programming technique supported by C. Every C program can be written in essentially the same way in C++ with the same run-time and space efficiency. It is not uncommon to be able to convert tens of thousands of lines of ANSI C to C-style C++ in a few hours. Thus, C++ is as much a superset of ANSI C as ANSI C is a superset of K&R C and much as ISO C++ is a superset of C++ as it existed in 1985.

Well written C tends to be legal C++ also. For example, every example in Kernighan & Ritchie: "The C Programming Language (2nd Edition)" is also a C++ program. "


> For example, every example in Kernighan & Ritchie: "The C Programming Language (2nd Edition)" is also a C++ program. "

That is rather dated, they do things like explicitly cast the void* pointer returned by malloc, but point out in the appendix that ANSI C dropped the cast requirement for pointer conversions involving void, C++ does not allow implicit void conversions to this day.


> Well written C tends to be legal C++ also

The "well written" remark is relevant.

Many style guides will consider implicit void conversions not well written C.

Naturally we are now on C23, and almost every C developer considers language extensions as being C, so whatever.


> The "well written" remark is relevant.

So using casts that hid implicit int declarations for years is "well written"?

> Many style guides will consider implicit void conversions not well written C.

I could not find a "Many" guide, Linux Kernel and ffmpeg seem to advocate against pointless casts.

> Naturally we are now on C23,

So irrelevant to the creation time of ffmpeg and only applicable to intentionally non portable libraries.


Well written idiomatic C is certainly not valid C++.


Depends on the beholder, however it hardly matters on the days of C23, as mentioned.


Do you usually post links without reading them?

all the time -- I call it "crowd-sourcing intelligence" :-)


I don't see your point. The thing you quote explicitly says C isn't a subset of C++.

> Well written C tends to be legal C++ also

and python2 can be written to be compatible with python3, but neither is a subset of the other




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: