Перейти до вмісту

функція main() з параметрами в С++


Повідомлень в темі: 8

#1 Гість_kotic_*

  • Гості

Відправлено 24.10.2010 – 14:00

  • 8
допоможіть будь ласка! мені потрібна хоча б якась інформація

FT232BM: Відредагував. Авторові усне попередження

Повідомлення відредагував FT232BM: 24.10.2010 – 14:17


#2 TpakTopucT

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 155 повідомлень
  • Стать:Чоловік
  • Місто:Banderstadt

Відправлено 24.10.2010 – 15:23

Перегляд дописуkotic (24.10.2010 15:00) писав:

допоможіть будь ласка! мені потрібна хоча б якась інформація

FT232BM: Відредагував. Авторові усне попередження

Невже в гуглі забанили...???

Змінні які передаються в функції main відповідають за параметри командної стрічки... Наприклад запуск такої програми, як ping з різними параметрами, для прикладу (ping -t 192.168.0.1)... В даному випадку ми передаємо три параметри (1. назва програми, 2. параметр -t 3. ір-адреса)... Всі ці значення зберігаються у масиві argv, а значення argc типу int відповідає за кількість переданих параметрів... А ви вже самі обробляєте ці параметри і виконуєте програму відповідно до заданих параметрів командної стрічки...
  • 0

#3 Amarok

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 2350 повідомлень
  • Стать:Чоловік
  • Місто:Дубно -> Нетішин -> Київ -> New York

Відправлено 25.04.2011 – 03:33

третій параметр char envp[] через який можна прочитати змінні середовища
  • 0

#4 TpakTopucT

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 155 повідомлень
  • Стать:Чоловік
  • Місто:Banderstadt

Відправлено 25.04.2011 – 08:48

Перегляд дописуAmarok (25.04.2011 03:33) писав:

третій параметр char envp[] через який можна прочитати змінні середовища
А у вас звідки такі дані? Хоча я чув про новий стандарт C++0x, правда доку ще по ньому не читав... Невже це згідно нового стандарту?
Згідно останнього прийнятого стандарту:

Цитата

The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;9) or in some other implementation-defined manner.


Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as
char ** argv, and so on.

Повідомлення відредагував TpakTopucT: 25.04.2011 – 09:08

  • 0

#5 Amarok

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 2350 повідомлень
  • Стать:Чоловік
  • Місто:Дубно -> Нетішин -> Київ -> New York

Відправлено 25.04.2011 – 10:03

Перегляд дописуTpakTopucT (25.04.2011 02:48) писав:

А у вас звідки такі дані? Хоча я чув про новий стандарт C++0x, правда доку ще по ньому не читав... Невже це згідно нового стандарту?
Згідно останнього прийнятого стандарту:

це не С++ а звичайне С

спробуйте цей код:

#include <stdio.h>

int main(int argc, char** argv, char** envp) {
	 int i = 0;
	 while(envp[i] != NULL) {
			  printf("envp[%d] %s \n", i, envp[i]);
	 }
	printf("\n");
   return 0;
}

Цитата

Traditionally, if a third parameter is passed to main, that parameter is named envp.
http://msdn.microsoft.com/en-us/library/3z...v=vs.71%29.aspx

Цитата

Main() takes a third optional argument:

//=========================================================
main ( argc, argv, envp)
int argc; char *argv[]; char **envp;
// Note that **char and *char[] are equivalent
{...
}
//=========================================================

http://cs.nyu.edu/~yap/prog/c/
хай пробачать модери за англомовні цитати але на цю тематику я не знаю українськомовних ресурсів...
  • 0

#6 TpakTopucT

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 155 повідомлень
  • Стать:Чоловік
  • Місто:Banderstadt

Відправлено 25.04.2011 – 11:01

Перегляд дописуAmarok (25.04.2011 10:03) писав:

це не С++ а звичайне С
Якщо це просте С то я справжній тракторист. На жаль зараз не маю встановленого gcc компілятора, щоб перевірити. Ось джерело з переліком всіх стандартів мови С. Тут я даю гарантію 100% що кожен з вище перелічених стандартів не підтримує набору з 3х аргументів. Програма в кращому випадку проігнорить дане оголошення в гіршому кришане або просто не скомпілиться.
Пробував під Qt під віндою скомпілилось а під Unix. Все ж вирішив розібратися де собака зарита і ось:

Цитата

Microsoft Windows have a third argument giving the program's environment:
int main(int argc, char **argv, char **envp)
Джерело тут
З цього ж сайту:

Цитата

Mac OS X and Darwin have a fourth parameter containing arbitrary OS-supplied information, such as the path to the executing binary:[3]
int main(int argc, char **argv, char **envp, char **apple)
Але все ж це не стандарт С чи С++... Так що ваше твердження вірне лише для win подібних систем, і не задокументовані в жодному зі стандартів С чи С++.
  • 0

#7 Amarok

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 2350 повідомлень
  • Стать:Чоловік
  • Місто:Дубно -> Нетішин -> Київ -> New York

Відправлено 25.04.2011 – 17:31

Воно вірне і для Віндоус і для Лінукс. Правда я пробував тільки на лінуксі але колеги по класу казали що на віндоусі аналогічна поведінка.
На скільки мені відомо будь-яке ІДЕ для С/С++ використовує той самий gcc.
Все правильно ті джерела говорять, так і є.

Після того як скомпілювалось ви запускали її?
  • 0

#8 TpakTopucT

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 155 повідомлень
  • Стать:Чоловік
  • Місто:Banderstadt

Відправлено 25.04.2011 – 21:21

Перегляд дописуAmarok (25.04.2011 17:31) писав:

На скільки мені відомо будь-яке ІДЕ для С/С++ використовує той самий gcc.
Звідки ви таке взяли? Ось список С та C++ компіляторів. І різні IDE використовують різні компілятори. А ви всі яйця в одну сковорідку...

Перегляд дописуAmarok (25.04.2011 17:31) писав:

Після того як скомпілювалось ви запускали її?
Зранку коли пробував потестити для unix то скомпілив, запустив, а результату ніякого. Походу воно просто його ігнорить.
Чи ви отримали якийсь результат? Щоб було дуже дивно для Posix системи.

Повідомлення відредагував TpakTopucT: 25.04.2011 – 21:22

  • 0

#9 Amarok

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 2350 повідомлень
  • Стать:Чоловік
  • Місто:Дубно -> Нетішин -> Київ -> New York

Відправлено 25.04.2011 – 22:28

Перегляд дописуTpakTopucT (25.04.2011 14:21) писав:

Звідки ви таке взяли? Ось список С та C++ компіляторів. І різні IDE використовують різні компілятори. А ви всі яйця в одну сковорідку...


Зранку коли пробував потестити для unix то скомпілив, запустив, а результату ніякого. Походу воно просто його ігнорить.
Чи ви отримали якийсь результат? Щоб було дуже дивно для Posix системи.

ааа окей, ну codeblocks i bloodshed dev використовують gcc

#include <stdio.h>

int main(int argc, char** argv, char** envp) {
   int i = 0;
   while(envp[i] != NULL) {
		 printf("evnp[%d]: %s \n", i, envp[i]);
		 i++;  // забувся проінкрементувати)
   }
   return 0;
}

Прикріплені файли

  • Прикріплений файл  envp_script.txt   2.77К   6 Кількість завантажень:

Повідомлення відредагував Amarok: 25.04.2011 – 22:31

  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних