(\):延續巨集至第二行。
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")
(#) :轉換巨集參數為字串
[dywang@deyu zzz]$ vim preprocess2.c
[dywang@deyu zzz]$ cat preprocess2.c
#include <stdio.h>
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")
int main(void) {
message_for(Carole, Debra);
return 0;
}
[dywang@deyu zzz]$ gcc -o preprocess2 preprocess2.c
[dywang@deyu zzz]$ ./preprocess2 Carole and Debra: We love you!
(##):組合兩個參數。
[dywang@deyu zzz]$ vim preprocess3.c
[dywang@deyu zzz]$ cat preprocess3.c
#include <stdio.h>
#define tokenpaster(n) printf ("token" #n " = %d\n", token##n)
int main(void) {
int token34 = 40;
tokenpaster(34);
return 0;
}
[dywang@deyu zzz]$ gcc -o preprocess3 preprocess3.c
[dywang@deyu zzz]$ ./preprocess3 token34 = 40
[dywang@deyu zzz]$ vim preprocess4.c
[dywang@deyu zzz]$ cat preprocess4.c
#include <stdio.h>
#if !defined (MESSAGE)
#define MESSAGE "You wish!"
#endif
int main(void) {
printf("Here is the message: %s\n", MESSAGE);
return 0;
}
[dywang@deyu zzz]$ gcc -o preprocess4 preprocess4.c
[dywang@deyu zzz]$ ./preprocess4 Here is the message: You wish!