Ограничение количества аргументов для main в C - PullRequest
10 голосов
/ 16 сентября 2010

Есть ли ограничение на количество аргументов, которые мы передаем main() в C? Как вы все знаете, это определяется как int main(int argc, char *argv[]).

Когда я вызываю программу, я могу передать аргументы так:

$ prog.exe arg1 arg2 arg3.....argn

Существует ли верхняя граница количества аргументов, которые мы можем предоставить main() таким образом?

Ответы [ 4 ]

15 голосов
/ 16 сентября 2010

Согласно спецификации POSIX для exec существует макрос ARG_MAX, определенный в <limits.h>, который определяет максимальное количество байтов для аргументов + переменных среды .

Но поскольку C ничего не определяет по этому поводу, нет, кроссплатформенного ограничения не существует. Вы должны обратиться к руководству по вашей ОС, если оно не определяет этот макрос.

13 голосов
/ 16 сентября 2010

Нет, ограничения по стандарту ISO C99 отсутствуют.Если вы используете «благословенную» main форму (из которых их две):

int main (int argc, char *argv[]);

, тогда вы будете ограничены максимальным размером целого числа со знаком (зависит от реализации, но гарантированнобыть не менее 2 15 -1 или 32 767).

Конечно, вы могли бы даже иметь больше , чем это, поскольку стандарт специально разрешает неблаженные main формы (например, тот, который принимает long в качестве счетчика).

Стандарт предписывает, как хранятся аргументы, и такие вещи, как argv[argc], должны быть NULL, но он не ограничивает напрямуюколичество.

Конечно, на практике будет ограничение, но это будет полностью зависеть от реализации и среды.Однако, если вам нужно спросить, то вы, вероятно, делаете что-то не так .

Большинство инструментов помещают действительно большое количество аргументов в файл ответов (скажем, args.txt), а затемпередать один аргумент, например:

my_prog @args.txt

, который позволяет обойти произвольные ограничения на количество и размер аргумента.

1 голос
/ 16 сентября 2010

Я бы так не думал. Хотя теоретического ограничения может и не быть, компьютер, вероятно, не может обработать 1,5 миллиона аргументов. Есть ли какая-то особая причина, по которой вам нужно это знать? Я бы не рекомендовал использовать аргументы командной строки для чего-то другого, кроме параметров, параметров файла и т. Д.

0 голосов
/ 16 сентября 2010

В самом C нет явного ограничения.Это пример поведения, не определенного в языке, а скорее реализации.Помните, что сам язык отличается от его реализации, последующих библиотек, IDE и т. Д.

...