Skip to contentSkip to conversation

C or C++

DISCUSSION Shriramana Sharma 3 participants 5 messages May 4, 2007 – May 22, 2007

lore
Share & tools
lore
#0 lore raw

Hello.

I am writing a library and wondering whether to write it in C or C++. Previously I knew only C but now I got introduced to the many conveniences of C++ I am loth to give them up. I also feel C++ is a cleaner language than C (for whatever reason).

OTOH I am thinking maybe if I write in C many more programmers will be able to use it - C programmers as well as C++ programmers, whereas if I write in C++ only C++ programmers can use it (i.e. if the API contains any C++-specific items [or even if otherwise?]).

I would like the list's opinion on whether it is worth sacrificing the advantages of C++ to capture more "clients".

A voice inside tells me -- Qt and KDE are pure C++, yet they are among the hugest-used (if there is such a word) libraries... But another voice tells me -- there is GTK, GNOME and so many other libraries which I do not know which may be having many users precisely because they are in pure C...

So I don't want to be like the frog in the well (who did not know there was such a thing as an ocean) and so I am asking you.

Namaste.

Shriramana Sharma.

#1 lore raw
Quoted 5 lines · Shriramana Sharma

A voice inside tells me -- Qt and KDE are pure C++, yet they are among the hugest-used (if there is such a word) libraries... But another voice tells me -- there is GTK, GNOME and so many other libraries which I do not know which may be having many users precisely because they are in pure C...

I choose C or C++ depending on the approach I plan to use. If it's system programming, or anything procedural, I'm most likely going to use C. If it's some high-level modeling that excellently suits OOP, I'm going for C++.

I can therefore only answer your question if you tell me what the library will do.

Leslie

Signature · 2 lines
Personal homepage: https://viridian.dnsalias.net/~sky/homepage/
gpg --keyserver pgp.mit.edu --recv-keys DD4EBF83
#2 lore raw
In reply to Shriramana Sharma
Quoted 13 lines · Shriramana Sharma

I am writing a library and wondering whether to write it in C or C++. Previously I knew only C but now I got introduced to the many conveniences of C++ I am loth to give them up. I also feel C++ is a cleaner language than C (for whatever reason).

OTOH I am thinking maybe if I write in C many more programmers will be able to use it - C programmers as well as C++ programmers, whereas if I write in C++ only C++ programmers can use it (i.e. if the API contains any C++-specific items [or even if otherwise?]).

I would like the list's opinion on whether it is worth sacrificing the advantages of C++ to capture more "clients".

Quoted 8 lines

A voice inside tells me -- Qt and KDE are pure C++, yet they are among the hugest-used (if there is such a word) libraries... But another voice tells me -- there is GTK, GNOME and so many other libraries which I do not know which may be having many users precisely because they are in pure C...

So I don't want to be like the frog in the well (who did not know there was such a thing as an ocean) and so I am asking you.

It depends upon what you want to do with the library.

If it's likely to be useful to other libraries, there's a strong incentive to use C, or at least to provide a C API (the standard implementation of GLU is written in C++, although the public API only uses C).

Signature · 1 line
Glynn Clements <[email protected]>
#3 lore raw
Quoted 4 lines · Glynn Clements

If it's likely to be useful to other libraries, there's a strong incentive to use C, or at least to provide a C API (the standard implementation of GLU is written in C++, although the public API only uses C).

Would it be enough if I ensure that the API header file does not contain any C++-only usages for such a library internally implemented in C++ to be linkable from a C program or library?

Or would there be problems with the C linker not being able to resolve references from the C object code to C++ symbols in the library? (I hope I got that terminology correct.)

Thanks again.

Shriramana Sharma.

#4 lore raw
Quoted 5 lines · Shriramana Sharma
Quoted 4 lines

If it's likely to be useful to other libraries, there's a strong incentive to use C, or at least to provide a C API (the standard implementation of GLU is written in C++, although the public API only uses C).

Quoted 7 lines

Would it be enough if I ensure that the API header file does not contain any C++-only usages for such a library internally implemented in C++ to be linkable from a C program or library?

Or would there be problems with the C linker not being able to resolve references from the C object code to C++ symbols in the library? (I hope I got that terminology correct.)

You can't link C code against C++ symbols.

If you want the library to be usable from C, the public interface must consist of functions (not methods) which are declared with C linkage (extern "C" ...). Those functions can call C++ code.

If you need to pass pointers to objects between C++ and C, you need to cast them to/from something which is valid in C (e.g. "void *").

Signature · 1 line
Glynn Clements <[email protected]>