2015-06-09 9 views
3
int main(int argc, char **argv) 
{} 
  1. Возможно ли, что argc равен 0?Есть ли какой-либо стандарт для формата аргумента программы?

  2. Must argv[0] быть именем исполняемого файла?

  3. Есть ли какой-либо стандарт для этих вопросов?

+2

Соответствующая информация содержится в этом ответе на [Что должно быть 'main()' return in C и C++?] (Http://stackoverflow.com/a/18721336/15168). –

ответ

6
  1. Да.

  2. Обычно да, он также может быть пустым или какой-либо другой идентифицирующей строкой или даже NULL (см. Мое добавление). Также можно изменить argv[0] на что-то еще изнутри программы.

  3. Спецификации C (и C++).

Вы также пропустили один: Последний элемент в argv всегда NULL, то есть argv[argc] всегда будет NULL.

В спецификации C11 оно приведено в §5.1.2.2.1. Запуск программы.

В спецификации C++ 11 его основная функция.

+3

2. Нет; если невозможно определить исполняемое имя, 'argv [0]' может быть указателем на пустую строку. Тем не менее, это скорее теоретическое, чем практическое утверждение. –

+1

И, перечитывая стандарты, указанные в дубликате, 'argc' разрешено равняться нулю как на C, так и на C++; Я забыл эту деталь. –

+0

@JonathanLeffler Я как раз собирался обновить свой ответ раньше, но потом должен был пойти на собрание. Обновлено сейчас. :) –

1
  1. Да
  2. No. ARGV [0] не существует, но если он делает это название программы, учитывая, что можно было бы получить.
  3. Я предполагаю, что это стандарт в C, Cpp. @JonathanLeffler связал отличный ответ.
+0

Пойдите, проверьте, что стандарты говорят в дублированном вопросе. Я забыл о возможности «argc == 0», но стандарты (как C, так и C++) явно позволяют это. Значение 'argv [0]' может быть пустой строкой вместо имени программы, предполагая 'argc> 0' - но только если невозможно указать имя программы на конкретной платформе. Это редко является практической проблемой в размещенных средах. –

+0

Спасибо, это для меня действительно удивительно. Вы изучаете всю жизнь: P – MKK

+0

Меня это тоже удивило. Как я уже сказал, я забыл, пока еще не пошел читать ... –

Смежные вопросы