在为开源编写一些小代码时,我在使用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;(。
我已经做了后一个,它有效。
谢谢!