2013-11-04 49 views
0
#define PRINT() printf("STRING:"); printf("%s %s",CONV_STR(20),CONV_STR(NAME));  
#define CONV_STR(X) #X  
#define NAME India  
int main()  
{ 
PRINT(); 
getch(); 
return 0; 
} 

爲什麼PRINT中的第一個printf沒有執行?預處理器指令字符串操作

+0

確定嗎?你可以發佈輸出嗎? – Thanushan

+0

它對我很好。儘管調用PRINT();中的';'是多餘的。 – Dipto

回答

1

對我來說,它按預期工作。我稍微更改了代碼:插入#include<stdio.h>,刪除getchr並加上printf("\n")print將被執行。我使用編譯器的-E選項來創建具有擴展宏的文件。

 
$ uname -a 
Linux xxxxxxxx.xxx.xx 2.6.18-238.9.1.el5 #1 SMP Tue Apr 12 18:10:56 EDT 2011 i686 athlon i386 GNU/Linux 
$ gcc -v 
Using built-in specs. 
Target: i386-redhat-linux 
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux 
Thread model: posix 
gcc version 4.1.2 20080704 (Red Hat 4.1.2-50) 
$ cat prog.c 
#include 
#define PRINT() printf("STRING:"); printf("%s %s",CONV_STR(20),CONV_STR(NAME)); 
#define CONV_STR(X) #X 
#define NAME India 
int main() 
{ 
PRINT(); 
printf("\n"); 
return 0; 
} 
$ gcc -o prog prog.c 
$ ./prog 
STRING:20 NAME 
$ gcc -E -o prog.txt prog.c 
$ tail prog.txt 
# 2 "prog.c" 2 



int main() 
{ 
printf("STRING:"); printf("%s %s","20","NAME");; 
printf("\n"); 
return 0; 
}