Догадки (даже образованные догадки) - это весело, но вам действительно нужно обратиться к документам стандартов, чтобы быть уверенным.Например, ISO C11 заявляет (мой акцент):
Если значение argc
больше нуля, строка, на которую указывает argv[0]
, представляет название программы;argv[0][0]
должен быть нулевым символом, если имя программы недоступно из среды хоста.
Так что нет, это только имя программы, если это имя доступно. Ион "представляет" имя программы, необязательно - имя программы.В предыдущем разделе говорится:
Если значение argc
больше нуля, элементы массива с argv[0]
по argv[argc-1]
включительно должны содержать указатели на строки, которые задаются реализациейзначения в среде хоста до запуска программы.
Это не отличается от C99, предыдущего стандарта, и означает, что даже значения не определяются стандартом - он работаетполностью к реализации.
Это означает, что имя программы может быть пустым, если среда хоста не не предоставляет его, и что-нибудь еще, если среда хоста делает предоставьте это, при условии, что "что-нибудь еще" так или иначе представляет имя программы.В мои более садистские моменты я бы подумал о том, чтобы перевести его на суахили, запустить его через шифр подстановки и затем сохранить его в обратном порядке байтов: -).
Однако, определенный в реализации имеет конкретное значение в стандартах ISO - реализация должна документировать, как это работает.Таким образом, даже UNIX, который может помещать все, что ему нравится, в argv[0]
с помощью семейства вызовов exec
, должен (и делает) документировать это.