G++ 和 MSBuild 在将"*"作为输入参数 (argv) 处理时的差异



在为开源编写一些小代码时,我在使用G++和MSBuild(VS编译器(进行编译时遇到了行为差异。我想知道这是编译器注入到可执行文件中的东西,还是为可执行文件设置的Windows属性。无论哪种情况,我都想关闭它…(g++中有标志吗?(。

问题是:当我将星号("*"(作为参数传递给在Visual Studio中编译的可执行文件时,argv包含一个星号(argc==2,argv[1]=="*"(,同时使用使用G++编译的代码执行同样的操作,星号将转换为文件列表(argc==7,argv[1]=="文件夹中的第一个文件",argv[1]=="目录中的第二个文件"…(。

我在Windows 10上工作,使用VS 2019和G++10.2.0(MinGW(进行编译。

您可以通过打印argv内容来重新创建场景:

int main(int argc, char* argv[])
{
for (int i = 0; i < argc; i++)
{
std::cout << argv[i] << std::endl;
}
}

对可执行文件的调用来自命令行(cmd(:

a.exe *

谢谢Lior

问题已解决。

按照上面churill的建议(参考此(。如果您链接CRT_noglob.o或设置全局变量",则有一种方法可以禁用minGW的参数扩展;int _CRT_glob";到零(int _CRT_glob=0;(。

我已经做了后一个,它有效。

谢谢!

最新更新