用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)编译含有*命令行参数的程序,务必小心.