Параметри функції main( ) Відповідно до синтаксису мови Сі основна функція кожної програми може мати такий заголовок: int main (int argc, char *argv [ ], char *envp[ ]) Параметр argv - масив покажчиків на рядки; argc - параметр типа int, значення якого визначає розмір масиву argv, тобто кількість його елементів, envp - параметр-масив покажчиків на, символьні рядки, кожна з яких містить опис однієї із змінних середовища (оточення). Під середовищем розуміється та програма (звичайно це операційна система), яка "запустила" на виконання функцію main(). Призначення параметрів функції main() — забезпечити зв'язок виконуваної програми з операційною системою, точніше, з командним рядком, з якого запускається програма і в яку можна вносити дані і тим самим передавати виконуваній програмі будь-яку інформацію. Якщо усередині функції main() немає необхідності звертатися до інформації з командного рядка, то параметри звичайно опускаються. Якщо програміст "запускає" програму на мові Сі з інтегрованого середовища розробк (наприклад, Turbo C), то він рідко використовує командний рядок і повинен вживати спеціальні заходам, щоб побачити цей рядок або внести в нього потрібну інформацію. (В Turbo С потрібно в головному меню вибрати пункт RUN, а потім в спадаючому меню вибрати пункт ARGUMENTS...). При запуску програми з операційної системи командний рядок явно доступний, і саме в ньому записується ім'я виконуваної програми. Вслід за ім'ям можна розмістити потрібну кількість "слів", розділяючи їх один від одного пробілами. Кожне "слово" з командного рядка стає рядком-значенням, на який вказує черговий елемент параметра argv[i], де 0<i<argc. Тут потрібно зробити одне уточнення. Як і в кожному масиві, в масиві argv[ ] індексація элементів починається з нуля, тобто завжди є елемент argv[0]. Цей елемент є покажчиком на повну назву запускаємої програми. Наприклад, якщо з командного рядка виконується звернення до програми EXAMPLE з каталога CATALOG, розміщеного на диску С, то виклик в MS-DOS виглядає так: С:\CATALOG\EXAMPLE.ЕХЕ Значення argc в цьому випадку буде рівне 1, а рядок, який адресує покажчик argv[0], буде таким: "С:\CATALOG\EXAMPLE.ЕХЕ" Як ілюстрація сказаного приведемо програму, яка виводить на екран дисплея всю інформацію з командного рядка, розміщуючи кожне "слово" на новому рядку екрану. #include <stdio.h> void main (int argc,char *argv[ ]) { int і ; for (i=0; i<argc; i++) printf("\n argv [%d] -> %s", i, argv[i] ; } Нехай програма запускається з такого командного рядка: С:\WP\test66 11 22 33 Результат виконання програми: argv [0] -> С:\WP\test66.exe argv [1] -> 11 argv [2] -> 22 argv [3] -> 33 В головній програмі main( ) дозволено використовувати і третій параметр char * envp[ ]. Його призначення - передати в программу всю інформацію про оточення, в якому виконується програма. Наступний приклад ілюструє можливості цього третього параметра основної функції main( ). #include <stdio.h> void main (int argc,char *argv[], char *envp[]) { int n; printf("\nПрограмма '%s' " "\nЧисло параметрів при запуску: %d", argv[0], argc-l); for (n=l; n<argc; n++) printf("\n%d-й параметр: %s", n, argv[n]); printf("\n\nСписок змінних оточення:"); for (n=0; envpt[n]; n++) printf("\n%s", envp[n]); } Нехай програма "запущена" на виконання в MS-DOS під Windows 95 з такого командного рядка: С:\WWP\TESTPROG\MAINENVP.EXE qqq www Результати виконання програми: Програма ' С: \WWP\TESTPROG\MAINENVP. ЕХЕ ' Число параметрів при запуску: 2 1-й параметр: qqq 2-й параметр: www Список змінних оточення: ТМР=С: \WINDOWS\TEMP PROMPT=$p$g winbootdir=C: \WINDOWS COMSPEC=C:\WINDOWS\COMMAND.COM TEMP=c:\windows\temp CLASSPATH=.;c:\cafe\java\lib\classes.zip HOMEDRIVE=c: HOMEPATH=\cafe\java JAVA_HOME=c:\cafe\Java windir=C: \WINDOWS NWLANGUAGE=English PATH=C:\CAFE\BIN; C:\CAFE\JAVA\BIN; C:\BC5\BIN; C:\WINDOWS; C:\WINDOWS\COMMAND; C:\NC; C:\ARC;С:\DOS;C:\VLM;C:\TC\BIN CMDLINE=tC Через масив покажчиків envp[] програмі доступний набір символьних рядків, створюючих оточення програми. Частіше за все кожний рядок містить таку інформацію: ім'я_змінної = значення_змінної Наприклад, в приведених результатах ім'я змінної ТМР пов'язано з ім'ям каталога для тимчасових даних. Змінивши значення змінної ТМР, можна "примусити" програму використовувати для зберігання тимчасових даних інший каталог. Для роботи з рядками оточення в програмах на мові Сі використовують функції getenv() і putenv().