funktionsähnliches Makro mit demselben Namen wie ein objektähnliches Makro

8

Ist es möglich, in C etwas wie:

zu haben %Vor%

Können sie nebeneinander existieren?

    
coredump 25.09.2012, 09:30
quelle

4 Antworten

5

Der C Standard sagt (ISO / IEC 9899: 1999 , §6.10.3, 2):

  

Ein Bezeichner, der momentan als objektartiges Makro definiert ist, darf nicht von einem anderen neu definiert werden   # define preprocessing directive, es sei denn, die zweite Definition ist ein objektähnlicher Makro   Definition und die zwei Ersatzlisten sind identisch. Ebenso ein Bezeichner derzeit   definiert als ein funktionsähnliches Makro, darf nicht durch ein anderes #define neu definiert werden   Vorverarbeitungs-Direktive, es sei denn, die zweite Definition ist eine funktionsähnliche Makrodefinition   Das hat die gleiche Nummer und Schreibweise der Parameter, und die zwei Ersatzlisten sind   identisch.

Also ist die Antwort nein.

    
undur_gongor 25.09.2012, 09:57
quelle
3

Nein. Eine funktionsähnliche (mit args) und ein objektähnliches Makro (keine args) kann nicht mit dem gleichen Namen definiert werden (im Standard würde der Versuch, dies zu tun, gegen eine soll nicht Regel verstoßen, was bedeutet, dass Compiler wird benötigt, um es zu diagnostizieren). C99 spezifiziert jedoch variadische Makros (die 1 oder mehr Argumente annehmen). Vielleicht wird das tun, was Sie wollen?

Sie können #undef MACRO_EX frei definieren und mit Argumenten neu definieren, wenn das Ihr Problem löst. Aber es kann nur mit oder ohne Argumente verwendet werden.

    
Jens 25.09.2012 09:34
quelle
1
%Vor%

In diesem Programm

%Vor%

Ich bekomme

%Vor%

Wenn ich einen Makro & amp; Es funktioniert dann gut :)

Aber gemäß C99 Std

6.10.3

Ein Bezeichner, der derzeit als object-like -Makro definiert ist, darf nicht durch eine andere # define-Preprocessing-Direktive neu definiert werden, es sei denn, die zweite Definition ist eine objektähnliche Makrodefinition und die beiden Ersatzlisten sind identisch. Ebenso darf ein Bezeichner, der derzeit als function-like -Makro definiert ist, nicht durch eine andere # define-Preprocessing-Direktive neu definiert werden, es sei denn, die zweite Definition ist eine funktionsähnliche Makrodefinition mit der gleichen Anzahl und Schreibweise von Parametern und den beiden Ersetzungslisten sind identisch.

Ich habe den gleichen Code ausprobiert, indem ich mit -std=c99 immer noch denselben Fehler erhalte.

    
Jeyaram 25.09.2012 09:31
quelle
0

siehe

Zypern

%Vor%

Fehler

%Vor%     
Jeegar Patel 25.09.2012 09:37
quelle

Tags und Links