Forum: Compiler & IDEs Im Makro 2 Parameter durch Makro ersetzen


von Christoph (Gast)


Lesenswert?

Hallo,

ist es möglich mit Hilfe des C-Präprozessors auch die Parameter eines 
Makros zu ersetzen? Möchte vom Prinzip her folgendes machen:
1
#define f1(a, b)  a + b
2
#define c1        0x23
3
#define c2        0x12
4
#define c3        c1,c2
5
6
int main(void)
7
{
8
  int x;
9
10
  x = f1(c1, c2);
11
  x = f1(c3);
12
  while (1);
13
}

Beim Präprozessordurchlauf ergibt sich dann aber dieser Fehler:
1
$>gcc -E test.c
2
# 1 "test.c"
3
# 1 "<built-in>"
4
# 1 "<command-line>"
5
# 1 "test.c"
6
# 13 "test.c"
7
int main(void)
8
{
9
 int x;
10
11
 x = 0x23 + 0x12;
12
 x =test.c:18:11: error: macro "f1" requires 2 arguments, but only 1 given
13
 f1;
14
 while (1);
15
}

Gibts da einen Trick c3 irgendwie anders mit c1 und c2 zu definieren, 
sodass der Fehler nicht mehr auftritt?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Zweimal ersetzen lassen:
1
#define f1(a, b)  a + b
2
#define f1_(x)    f1(x)
3
#define c1        0x23
4
#define c2        0x12
5
#define c3        c1,c2
6
7
int main(void)
8
{
9
  int x;
10
11
  x = f1(c1, c2);
12
  x = f1_(c3);
13
  while (1);
14
}

von Christoph (Gast)


Lesenswert?

Ich dachte zwar ich hätte diese Möglichkeit schon ausprobiert, aber es 
scheint nicht so, denn es klappt wunderbar. Danke für die schnelle 
Antwort!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.