mingw заставляет программу выполнять подстановку параметров подстановочными знаками. Чтобы отключить это поведение, добавьте в свою программу следующее:
int _CRT_glob = 0;
В мире unix ожидается, что оболочка выполнит подстановочное расширение.
$ perl -le'print for @ARGV' *
a
b
В Windows world, подстановочное расширение оставлено на усмотрение приложения.
>perl -le"print for @ARGV" *
*
Это затрудняет написание переносимых программ. Поскольку mingw часто используется для компиляции программ, которые не были написаны с учетом Windows, его библиотека времени выполнения C выполняет автоматическое расширение параметров по шаблону.
a.c
:
#include <stdio.h>
int main(int argc, char const* argv[]) {
for (int i=0; i<argc; i++)
printf("%s\n", argv[i]);
return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
a.c
a.exe
Но Mingw обеспечивает выход. Добавление следующего к вашей программе отключает это поведение:
int _CRT_glob = 0;
a.c
:
#include <stdio.h>
int _CRT_glob = 0;
int main(int argc, char const* argv[]) {
for (int i=0; i<argc; i++)
printf("%s\n", argv[i]);
return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
*