Deutsch   English   Français   Italiano  
<20241212105336.312@kylheku.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Kaz Kylheku <643-408-1753@kylheku.com>
Newsgroups: comp.lang.c
Subject: Re: I want to use the g++ template in the "C" gcc software
Date: Thu, 12 Dec 2024 19:09:26 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 88
Message-ID: <20241212105336.312@kylheku.com>
References: <vje7d4$21r85$1@dont-email.me>
Injection-Date: Thu, 12 Dec 2024 20:09:26 +0100 (CET)
Injection-Info: dont-email.me; posting-host="f3dab76e2eb062231896cdbb37925e96";
	logging-data="3046209"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/+i6gcVLwVavby5CyFYXgxdgwDz8R293Q="
User-Agent: slrn/pre1.0.4-9 (Linux)
Cancel-Lock: sha1:BPY0bGTZM+w7RFxNTaTFl9AV9ME=
Bytes: 4289

On 2024-12-12, aotto1968 <aotto1968@t-online.de> wrote:
> Hi,
>
> I create a C software and there is a requirement to use the g++
> template *in* the gcc.
> I do *not* want to use all the g++ "boilerplate" like special syntax, classes etc
> I just want to use the template.

It sounds like you want to work in a subset of C++ which includes the
entire C-like subset, plus template functions.

(Note that the class keyword in C++ is almost a synonym of struct.
In a dialect of C that has C++ templates, you should be able to justify
allowing yourself to use template structs, not only template functions.)

> 1. Is there a g++ switch to disable all the g++ features except of C source and template feature ?

g++ has few, if any, diagnostic options for excluding entire C++
features. You can turn off exception handling and RTTI.

It might also make sense to select an old dialect of C++, perhaps like
this:

  g++ -std=c++98 ...

(Unless you want to use newer features of C that appeared since C++98
and were added to C++.)

Obviously, since C++98 had classes, this will not turn off classes.

I myself maintain some code which is written in C++ that compiles as C
(or vice versa). But because you want to use templates, compiling as C
is out of the question.

When you stick to a strictly C compatible subset of C++ (no templates),
then ensuring you are not using special C++ features is very simple:
you regularly build the code with a C compiler!

Sometimes in my programming I have macros which are implemented
separately for C and C++. For instance for casting:

#ifdef __cplusplus
#define strip_qual(TYPE, EXPR) (const_cast<TYPE>(EXPR))
#define convert(TYPE, EXPR) (static_cast<TYPE>(EXPR))
#define coerce(TYPE, EXPR) (reinterpret_cast<TYPE>(EXPR))
#else
#define strip_qual(TYPE, EXPR) ((TYPE) (EXPR))
#define convert(TYPE, EXPR) ((TYPE) (EXPR))
#define coerce(TYPE, EXPR) ((TYPE) (EXPR))
#endif

For instance:

   const char *s0 = "abc";
   char *s1 = strip_qual(char *, s0);

In C, the strip_qual macro generates a C cast: (char *)(s0).
When compiled as C++, it becomes const_cast<char *>(s0).

Modern C has something called generic selection, which can do some
template-like things. *IF* your intended use of templates were simple
enough, it *might* be possible to wrap it behind some macros that
expand to C++ templates or to C generic selection.

Just an idea.

> 3. is there an external software to add the c++-template feature into
> an existing C software ?

The first C++ compilers were developed by Bjarne Stroupstrup as a front
end called "cfront" which generated C. The source for that are
available, and date back to the nineties. I believe they have template
support. It's been quite a while since I looked at the code, but I seem
to remember template stuff in there. If so, it's probably behind even
C++98; would it do partial specialization and such? Don't know.

Anyway, using a forked and stripped down version of cfront, it may be
possible to create a "C With Templates" dialect of C. (C++ was
originally called C With Classes).

Then you wouldn't need g++ at all; cfront would translate the code
to plain C, compiled with gcc.


-- 
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca