C preprocessor

Houtouridis Christos hoo2.ch.pub at gmail.com
Tue Nov 2 23:19:14 EET 2010


Χαιρετώ τη λίστα (Χρόνια και ζαμάνια)

Για να μην 'βγω τελείως off-topic, μιας και η λίστα είναι για χρήστες
linux θα σας πω το εξής, που αν θέλετε το πιστεύετε. Τα παρακάτω τα
δοκιμάζω σε ένα μηχάνημα με debian squeeze.

Έστω:
--------------

typedef struct
{
   int a;
   int b;
}mytype_t;

θέλουμε ένα macro fun που να παίρνει όλο το mytype_t αλλά να δουλεύει με
τα .a kai .b
Κάτι δλδ σαν το παρακάτω που ΔΕΝ δουλεύει.

#define fun(A,B)              \
   do{                        \
      A##.a = 5 + B##.a;      \
      A##.b = -5 + B##.b;     \
   }while (0)

 Ώστε να μπορείς να την καλέσεις κάπως έτσι

void main(void)
{
   mytype_t mpla, mplo={6,7};
   fun(mpla, mplo);		//(1)
}
Όμως ο πρεπρο(φ)εσσορας βγάζει για την γραμμή (1) αυτό:
do{mpla a = 5 + mplo a;mpla b = -5 + mplo b; }while (0);
       ^            ^                    ^
       |            |                    |

Όπως παρατηρείτε όλο το θέμα είναι οι "μάγκας" μας τρώει τις τελείες,
λες και από τελεστές έγιναν κολατσιό. Ξέρει κανείς πως μπορούμε τώρα να
κάνουμε concatenate τα "mpla" και ".a" έτσι ώστε να μας κάνουν την
δουλειά;

Κράτησα το καλό για το τέλος
Η δομή που νταλαβερίζομαι είναι λιγάκι ποιο πολύπλοκη
typedef union
{
   long fpu;
   struct
   {
      int i;
      int f;
   }fps;
}mytype_t;

Οπότε στην ουσία θέλω να μπορέσω να κάνω append στο mpla και το .fpu
αλλά και το .fps.i

Ευχαριστώ εκ των προτέρων

---
C.C.





More information about the Linux-greek-users mailing list