Mailinglist Archive: opensuse-programming-de (20 mails)
| < Previous | Next > |
Re: [opensuse-programming-de] Preprocessor-Direktiven im Inneren eines Makros
- From: Tilman Schmidt <t.schmidt@xxxxxxxxxxxxxxxxxx>
- Date: Fri, 01 Aug 2008 17:13:58 +0200
- Message-id: <48932836.2090502@xxxxxxxxxxxxxxxxxx>
Hi,
Am 30.07.2008 08:05 schrieb David Haller:
Nicht ganz. Was ich suche, ist eine leichter handhabbare Alternative zu
#ifdef N_FOO
{ "FOO", N_FOO },
#endif
#ifdef N_BAR
{ "BAR", N_BAR },
#endif
#ifdef N_BAZ
{ "BAZ", N_BAZ },
#endif
Deine Version ist da eher noch mühsamer zu schreiben.
Anwendung ist eine Übersetzungstabelle String <-> numerischer Wert für
die Liste der Line Disciplines in <linux/tty.h> bzw. <bits/ioctl-types.h>.
Die konkrete Menge der definierten Line Disciplines kann zwischen
verschiedenen Systemen variieren. Im Programm würde ich gerne einfach
die gemeinsame Obermenge aller Systeme eintragen, und bei der
Kompilierung sollen dann die jeweils nicht definierten einfach
weggelassen werden.
Danke
--
Tilman Schmidt
Phoenix Software GmbH
Bonn, Germany
Am 30.07.2008 08:05 schrieb David Haller:
Mehrstufig. Erklären kann ich jetzt grad nicht *gähn*:
==== t.c ====
#define N_FOO 1
#define N_BAZ 4
#ifdef N_FOO
#define _TABLE_ENTRY_FOO { "FOO", N_FOO },
#else
#define _TABLE_ENTRY_FOO
#endif
#ifdef N_BAR
#define _TABLE_ENTRY_BAR { "BAR", N_BAR },
#else
#define _TABLE_ENTRY_BAR
#endif
#ifdef N_BAZ
#define _TABLE_ENTRY_BAZ { "BAZ", N_BAZ },
#else
#define _TABLE_ENTRY_BAZ
#endif
#define TABLE_ENTRY(x) _TABLE_ENTRY_ ## x
static const struct { const char *s; int v; } table[] = {
TABLE_ENTRY(FOO)
TABLE_ENTRY(BAR)
TABLE_ENTRY(BAZ)
{ NULL, 0 }
};
====
$ cpp t.c | sed '/^$/d'
# 1 "t.c"
static const struct { const char *s; int v; } table[] = {
{ "FOO", 1 }, { "BAZ", 4 }, { NULL, 0 }
};
Das sollte doch sein, was du suchst, odr?
Nicht ganz. Was ich suche, ist eine leichter handhabbare Alternative zu
#ifdef N_FOO
{ "FOO", N_FOO },
#endif
#ifdef N_BAR
{ "BAR", N_BAR },
#endif
#ifdef N_BAZ
{ "BAZ", N_BAZ },
#endif
Deine Version ist da eher noch mühsamer zu schreiben.
Evtl. könnte man, je nach dem was die Expansion der Makros sein soll,
weiter makroisieren...
Anwendung ist eine Übersetzungstabelle String <-> numerischer Wert für
die Liste der Line Disciplines in <linux/tty.h> bzw. <bits/ioctl-types.h>.
Die konkrete Menge der definierten Line Disciplines kann zwischen
verschiedenen Systemen variieren. Im Programm würde ich gerne einfach
die gemeinsame Obermenge aller Systeme eintragen, und bei der
Kompilierung sollen dann die jeweils nicht definierten einfach
weggelassen werden.
Danke
--
Tilman Schmidt
Phoenix Software GmbH
Bonn, Germany
| < Previous | Next > |