用C-Free(使用默認(rèn)的mingw編譯器)編譯一個(gè)程序的時(shí)候,出現(xiàn)了一個(gè)古怪的現(xiàn)象.MS如果一個(gè)程序有命令行參數(shù)且命令行參數(shù)中含有*,則編譯器就會(huì)將*替換為本目錄下的所有文件名,而用VC++6.0則不會(huì)出現(xiàn)以上的情況.
測(cè)試了一番,的確如此.程序代碼如下:
/* 包含頭文件 */
#include <stdio.h>
main(int argc, char *argv[])
{
while (argc-- > 0)
{
printf("%s\n", *argv++);
}
return 0;
}
用C-Free4.0(使用默認(rèn)的mingw編譯器)編譯成expr.exe.然后將其放置于一個(gè)文件夾下,此時(shí)文件夾里含有兩個(gè)文件:expr.exe和expr.txt.從命令行執(zhí)行: expr.exe *,結(jié)果顯示:
expr.exe
expr.exe
expr.txt
用VC++6.0編譯成expr2.exe,然后將它移到此文件夾下,執(zhí)行同樣的命令: expr.exe *,結(jié)果如下:
expr2.exe
*
如果*不是作為一個(gè)單獨(dú)的參數(shù),而是作為一個(gè)參數(shù)的一部分,情況會(huì)怎樣,執(zhí)行命令:expr.exe 1*2,結(jié)果如下:
expr.exe
1*2
因此,在使用C-Free(默認(rèn)編譯器mingw)編譯含有*命令行參數(shù)的程序,務(wù)必小心.