2015-03-14 7 views
0

У меня есть небольшая, но запутанная проблема ... Первый вопрос - это то, что использование main.I знаю, что вопрос глупый и простой, но у меня есть проблема. Я написал кодОсновная функция для дочернего процесса

#include<unistd.h> 
#include<sys/types.h> 
#include<stdio.h> 


int main(){ 
pid_t ty; 

ty=fork(); 
if(ty==0){ 
const char* x="/home/brucewilson/Desktop/jack_sahoo_teja_CDP/hey2"; 
static char *argv[]={"echo","Foo is my name.",NULL}; 
int main(){//observe this is second main in my child process 
printf("hello"); 
} 
int add(){ 
printf("5"); 
} 

main(); 
add(); 

} 

} `

Наблюдали ли вы вторую главную функцию я использовал в моем процессе ребенка хорошо компилятор не дал мне ошибку для this..Added этого он дал мне выход, как«привет»и 5 .

И, очевидно, приведенный ниже код даст ошибку ...

int main(){ 

printf("main"); 
main(); 
} 
int main(){ 
} 

Так что мой вопрос, почему он работает для дочернего процесса? Так это понятие, что Im предполагая, чтобы быть правдой, что не существует функция может быть названа основной() и каждый дочерний процесс будет иметь основную функцию совместно из его родителя является ложным. Пожалуйста, объясните мне, что происходит под этим кодом внутри моей системы, потому что дочерний процесс предполагает основную функцию, как и другую функцию, и ей также не нужна основная функция. Тогда как ребенок будет знать, откуда он должен начинать?

+0

Вы говорите, что компилятор не дает вам ошибок? Я получаю немало, когда пытаюсь скомпилировать ваш код. – cooperl1

+0

Для второго кода вы получаете ошибки для первого, что вы не делаете. Если вы хотите его увидеть, я не могу опубликовать снимок экрана –

+0

Я определенно получаю много ошибок компилятора для первого кода. Например, вы не можете объявлять функции внутри других функций на C++. Язык не поддерживает эту функцию. См. Http://stackoverflow.com/questions/4324763/c-can-we-have-functions-inside-functions – cooperl1

ответ

2

Вы используете нестандартный GCC extension known as 'nested functions'.

Второй пример невозможен, потому что вы не вставляете второе определение main(), поэтому оно конфликтует с первым.

+0

ok sir вы можете объяснить мне немного более подробно, как то, что на самом деле происходит. Я понял по вашей ссылке, что могу использовать одно и то же имя, так что основная функция, написанная следующей рассматривается как локальная функция? –

+0

Я не уверен, что могу перейти к гораздо большей детализации, чем в связанной документации. После объявления вложенной функции вызовы на имя этой функции * в этой области * вызовут вложенную функцию. –

+0

, так что теперь, как ребенок, так и родитель, имеют одну и ту же основную функцию? –

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