Προς το περιεχόμενο

C Macro question


Επισκέπτης

Προτεινόμενες αναρτήσεις

Δημοσ.

Kalispera,

 

Mporei kapoios na mou eksigisei giati auto douleuei:

 

>
#include <stdio.h>

#define TEST 1,2,3,4

#define RETRIEVETEST(a,b,c,d) d
#define GETTEST(a) RETRIEVETEST(a)

int main()
{
       printf( "Should print four: %d\n", GETTEST( TEST ) );
       return 0;
}

 

kai auto oxi ?

 

>
include <stdio.h>

#define TEST 1,2,3,4

#define RETRIEVETEST(a) AFTER(a)
#define AFTER(a,b,c,d) d
#define GETTEST(a) RETRIEVETEST(a)

int main()
{
       printf( "Should print four: %d\n", GETTEST( TEST ) );
       return 0;
}

 

Se vc++ fusika den douleuei kanena apo ta 2, se gcc mono to 1o.

 

Upo8etw oti exei na kanei me ton tropo kai tin seira me tin opoia o preprocessor tis C kanei tis antikatastaseis alla den mporw katalabw.

 

Kamia idea?

 

PS. Epishs to printf( "Should print four: %d\n", GETTEST( 1,2,3,4) ); petaei error gia invalid arguments

 

Thanks

Δημοσ.

Για την ιστορία ο πρώτος κώδικας περνά μια χαρά σε CodeGear/Borland Turbo C++ Explorer ;)

 

Ο δεύτερος όχι - για τον λόγο που αναφέρεις, λάθος αριθμός παραμέτρων δηλαδή.

 

Από εκεί και πέρα, ο ακριβής τρόπος που λειτουργεί ο C-preprocessor είναι αρκετά περίπλοκος όπως παρατηρεί και ο Διομήδης Σπινέλλης στο http://www.spinellis.gr/blog/20060626/index.html.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...