4 ответов:
да
argv[argc]==NULLгарантируется. Смотрите C11 5.1.2.2.1 запуск программы (Курсив мой)если они объявлены параметры функции main должны подчиняться следующие ограничения:
значение argc должно быть неотрицательным. argv[argc] должно быть null указатель.
предоставляет
argcпоэтому не является жизненно важным, но по-прежнему полезно. Среди прочего, это позволяет быстро проверить, что передано правильное количество аргументов.изменить: вопрос был изменен, чтобы включить C++. проект n3337 основные функции 3.6.1 говорит
2 ...argc - это количество аргументов, переданных программе из среда, в которой выполняется программа. .... Значение argc должно быть неотрицательным. значение argv[argc] должно быть 0.
да
argv[argc]гарантированно является нулевым указателем.argcиспользуется для удобства.цитируя официальное объяснение из обоснования C99, обратите внимание на слова избыточные проверки:
обоснование международного стандарта-языки программирования-C §5.1.2.2.1 программа запуска
спецификация
argcиargvв качестве аргументовmainпризнает обширный предшествующий практиковать.argv[argc]требуется быть нулевым указателем, чтобы обеспечить избыточную проверку для конца списка, также на основе общей практики.
Это по историческим причинам, и совместимость со старым кодом. Первоначально не было гарантии, что в качестве последнего элемента массива argv будет существовать нулевой указатель. Но argc имеет всегда существовало.
нам это "нужно", потому что это требуется по различным стандартам.
мы можем полностью игнорировать значение, но так как это первый параметр
main, мы должны иметь его в списке параметров. В C++ (и, вероятно, нестандартных диалектах C) вы можете просто опустить имя параметра, например, этот фрагмент C++ (легко конвертировать в C):#include <stdio.h> // C-compatible include, guarantees puts in global namespace // program will print contents of argv, one item per line, starting from argv[0] int main(int /*argc*/, char *argv[]) { // uncomment argc for C //(void)argc; // uncomment statement for C for (int i=0; argv[i]; ++i) { puts(argv[i]); } return 0; }в стандартном C, с общими настройками предупреждений, неиспользуемый параметр генерирует предупреждение, которое может быть исправлено с помощью оператора типа
(void)argc;что приводит к тому, что имя будет использоваться без создания какого-либо кода.
argcприятно иметь, потому что в противном случае многие программы должны были бы ходить thorugh параметры, чтобы получить счет. Кроме того, во многих языках программирования с массивами, которые имеют длину, нет никакогоargcпараметр, есть только массив с элементами.
Comments