gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:42:50 28 4
gpt4 key购买 nike

在为开源编写一些小代码时,我在使用 G++ 和 MSBuild(VS 编译器)进行编译时遇到了行为差异。我想知道这是否是编译器注入(inject)可执行文件的东西,还是设置为可执行文件的 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 *
谢谢
里奥

最佳答案

问题解决了。
根据上面 churill 的建议(引用 this)。如果您与 CRT_noglob.o 链接或将全局变量“int _CRT_glob”设置为零(int _CRT_glob = 0;),则有一种方法可以禁用 minGW 的参数扩展。
我已经完成了后者并且它有效。
谢谢!

关于c++ - 将 "*"作为输入参数 (argv) 处理时的 G++ 和 MSBuild 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67364626/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com