int main(int argc, char **argv)
{}
Возможно ли, что
argc
равен 0?Есть ли какой-либо стандарт для формата аргумента программы?Must
argv[0]
быть именем исполняемого файла?Есть ли какой-либо стандарт для этих вопросов?
int main(int argc, char **argv)
{}
Возможно ли, что argc
равен 0?Есть ли какой-либо стандарт для формата аргумента программы?
Must argv[0]
быть именем исполняемого файла?
Есть ли какой-либо стандарт для этих вопросов?
Да.
Обычно да, он также может быть пустым или какой-либо другой идентифицирующей строкой или даже NULL
(см. Мое добавление). Также можно изменить argv[0]
на что-то еще изнутри программы.
Спецификации C (и C++).
Вы также пропустили один: Последний элемент в argv
всегда NULL
, то есть argv[argc]
всегда будет NULL
.
В спецификации C11 оно приведено в §5.1.2.2.1. Запуск программы.
В спецификации C++ 11 его основная функция.
2. Нет; если невозможно определить исполняемое имя, 'argv [0]' может быть указателем на пустую строку. Тем не менее, это скорее теоретическое, чем практическое утверждение. –
И, перечитывая стандарты, указанные в дубликате, 'argc' разрешено равняться нулю как на C, так и на C++; Я забыл эту деталь. –
@JonathanLeffler Я как раз собирался обновить свой ответ раньше, но потом должен был пойти на собрание. Обновлено сейчас. :) –
Пойдите, проверьте, что стандарты говорят в дублированном вопросе. Я забыл о возможности «argc == 0», но стандарты (как C, так и C++) явно позволяют это. Значение 'argv [0]' может быть пустой строкой вместо имени программы, предполагая 'argc> 0' - но только если невозможно указать имя программы на конкретной платформе. Это редко является практической проблемой в размещенных средах. –
Спасибо, это для меня действительно удивительно. Вы изучаете всю жизнь: P – MKK
Меня это тоже удивило. Как я уже сказал, я забыл, пока еще не пошел читать ... –
Соответствующая информация содержится в этом ответе на [Что должно быть 'main()' return in C и C++?] (Http://stackoverflow.com/a/18721336/15168). –