ist Wie Sie sehen ein Token Werke verketten,
auch ein Token ein anderes Makro funktioniert ist,
aber wenn ein Token ein Makro ist es scheint nicht zu Arbeit?GCC Precompilers Makro ##, mit Token verketten, die ein anderes Makro
longNameForaFunction_one(){return 1;}
longNameForaFunction_two(){return 2;}
longNameForaFunction_third(){return 3;}
two(){return 2;}
#define bar two
#define foo(x)(longNameForaFunction_##x())
#define three third
main(){
printf("%d\n",foo(one)); // 1
printf("%d\n",foo(two)); // 2
printf("%d\n",bar()); // 2
// printf("%d\n",foo(three)); // this doesn't work
}
Die letzte Reihe gibt diesen Fehler wenn unkommentiert;
undefined reference to `longNameForaFunction_three‘
#define three third
scheint keine Wirkung zu haben
Verwenden Sie mehr Leerraum. Verwende '#define EVALUATOR (x) x' und' #define CONCATENATE (x, y) x ## y' und dann '#define foo (x) CONCATENATE (longNameForaFunction_, EVALUATOR (x))'. Und das ist ein Duplikat. –