[Development] Could support for C be added to Qt?

Kevin Kofler kevin.kofler at chello.at
Sun Sep 11 16:25:48 CEST 2022

samuel ammonius wrote:
> I'm new to contributing to Qt directly, but I've been trying to create
> external C bindings for Qt for a few months now. Since C and C++ are so
> similar, I've recently been thinking it may just be better to add C
> support directly to the Qt headers by checking for the __cplusplus macro.

The main issue I see with your proposed approach is that it is very reliant 
on internals of the compiler you are using (I presume GCC and/or Clang), if 
it even compiles at all.

E.g., your QT_DEFINE_C_EXPORT macro expands to something like:
extern "C" const auto QPushButton_setFlat = &QPushButton::setFlat;
(By the way, I believe the ## operator is unnecessary there.)

I believe it is not guaranteed at all that a pointer-to-member can validly 
be exported as extern "C", nor how the this pointer is to be passed when you 
do that.

And the C declaration from QT_C_EXPORT expands to:
void QPushButton_setFlat(bool);
which does not include a this pointer anywhere, so where does the object on 
which to call setFlat come from?

The approach you currently implemented, with the wrapper functions, is much 
more portable, though indeed at the expense of an extra function call for 
every call to a member function (method) of a C++ object.

        Kevin Kofler

More information about the Development mailing list