用C-Free(使用默認的mingw編譯器)編譯一個程序的時候,出現了一個古怪的現象.MS如果一個程序有命令行參數且命令行參數中含有*,則編譯器就會將*替換為本目錄下的所有文件名,而用VC++6.0則不會出現以上的情況.
測試了一番,的確如此.程序代碼如下:
/* 包含頭文件 */
#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.從命令行執行: expr.exe *,結果顯示:
expr.exe
expr.exe
expr.txt
用VC++6.0編譯成expr2.exe,然后將它移到此文件夾下,執行同樣的命令: expr.exe *,結果如下:
expr2.exe
*
如果*不是作為一個單獨的參數,而是作為一個參數的一部分,情況會怎樣,執行命令:expr.exe 1*2,結果如下:
expr.exe
1*2
因此,在使用C-Free(默認編譯器mingw)編譯含有*命令行參數的程序,務必小心.