2012-03-24 6 views
0

Warum meldet der folgende Code einen Lvalue erforderlich Fehler? Und wie können wir ein Makro schreiben, das ein Array und die Anzahl der Elemente im Array als Argumente erhält und dann die Elemente des Arrays ausgibt?Lvalue erforderlich Fehler mit Makro

#define arr(b) printf("%d",b++);\ 
       printf("%d",b); 


int main() 
{ 
    arr(5); 
} 
+0

ignorierend, dass es nicht „Arbeit“ ... klammern alles in der Makrodefinition! Angenommen, es wird mit "arr (6 * 3)" aufgerufen "..." #define arr (b) printf ("% d", (b) ++); printf ("% d", b); ' – pmg

+0

In Ordnung .. habe es .. Kann jemand bitte den anderen Teil der Frage beantworten ?? – user1232138

Antwort

1

Da ein Teil dieses Makro expandiert nach 5++, die nicht gültig C. Betrachten Sie ist b+1 statt b++ verwenden.

4

Wenn Sie das Makro erweitern, erhalten Sie die folgenden Schritte aus:

int main() 
{ 
    printf("%d",5++); 
    printf("%d",5); 
} 

Sie können die Konstante 5 nicht Postinkrement, so erhalten Sie einen Fehler.

Denken Sie daran, Makros sind keine Funktionen. Wenn Sie es wie eine Funktion handeln wollen, stellen Sie einfach eine Funktion:

void arr(int b) { 
    printf("%d",b++); 
    printf("%d",b); 
} 
+3

+1 für "Wenn Sie eine Funktion wünschen, schreiben Sie eine Funktion". –

1

Die erste l in lvalue steht für links.

Nur linke Werte können zugewiesen werden.

Wenn Sie x ++ schreiben, meinen Sie x = x + 1 (auch Sie erhalten einen Wert davon).

Das Problem ist also nicht sinnvoll 5 = 5 + 1

vielleicht Sie möchten, dies tun zu schreiben macht:

int x = 5; 
arr(x); 
Verwandte Themen