Просматривал исходный код sudo, представленный на этом сайте, и наткнулся на эту супер странную подпись типа (дополнительный вопрос: есть ли более похожий на C термин для "подписи типа"?) для main:
int
main(argc, argv, envp)
int argc;
char **argv;
char **envp;
{
Я так понимаю, что сам стиль это олдскул K&R. Что меня действительно интересует, так это тот факт, что main принимает бонусный аргумент, char **envp
. Почему? sudo является довольно стандартным инструментом командной строки и вызывается как таковой. Как операционная система узнает, что делать, когда она сталкивается с основной функцией, которая не определена с помощью обычного (int argc, char *argv[])?
Много раз я сам был ленив и просто полностью отказывался от аргументов, и любая программа, которую я писал, работала нормально (самая опасная вещь, которая может случиться с C, я знаю :p)
Другая часть моего вопроса заключается в том, какие классные вещи все это позволяет вам делать? У меня есть подозрение, что это очень помогает при встроенном программировании, но, к сожалению, я мало сталкивался с этим и не могу точно сказать. Мне бы хотелось увидеть конкретные примеры