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