【发布时间】:2015-03-14 06:23:27
【问题描述】:
我有一个小而令人困惑的问题... 第一个问题是main有什么用。我知道这个问题很傻很简单但是我有一个问题。我写了一个代码
#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();
}
}`
你有没有观察到我在我的子进程中使用的第二个主函数,编译器没有给我任何错误。再加上它给我的输出是“你好”和 5。
显然下面的代码会报错...
int main(){
printf("main");
main();
}
int main(){
}
所以我的问题是为什么它对子进程有效?所以我假设没有函数可以命名为 main() 并且每个子进程都将具有与其父进程共享的 main 函数的概念是false。请解释一下我系统中这段代码下面的内容,因为子进程假定 main 只是另一个函数,它也不需要 main 函数。那么子进程如何知道它应该从哪里开始呢?
【问题讨论】:
-
你说编译器没有给你错误?当我尝试编译你的代码时,我得到了很多。
-
对于第二个代码,你确实会得到错误,而第一个你不会。如果你想看到它,我不能给你发截图
-
第一个代码我肯定会遇到很多编译器错误。例如,您不能在 C++ 中的其他函数中声明函数。该语言不支持该功能。见:stackoverflow.com/questions/4324763/…
-
请看下面的答案,这取决于您的编译器版本。这就是我们在编译中遇到冲突的原因
-
如果您使用的是非标准扩展,在您的问题中提及这些内容会有所帮助 - 仅供将来参考。
标签: c++ linux linux-kernel