Причина, по которой он не находится в пределах .h, состоит в том, что это не величина, задающая пределы диапазона значений целочисленного типа на основе ширины в текущей архитектуре. Эта роль назначена limit.h по стандарту ISO.
Значение, которое вас интересует, на практике не зависит от аппаратного обеспечения и может варьироваться от платформы к платформе и, возможно, от сборки системы до сборки системы.
Правильно сделать, это позвонить sysconf
и спросить его «ARG_MAX» или «_POSIX_ARG_MAX». Я думаю, это все равно POSIX-совместимое решение.
Точность. в мою документацию вы включаете один или оба файла unistd.h или limit.h в зависимости от того, какие значения запрашиваете.
Еще один момент: многие реализации семейства функций exec возвращают E2BIG или аналогичное значение, если вы пытаетесь вызывать их в слишком большой среде. Это одно из определенных условий, при которых exec может фактически вернуться.