【问题标题】:Main function for a child process子进程的主要功能
【发布时间】: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


【解决方案1】:

您使用的是非标准的GCC extension known as 'nested functions'

您的第二个示例失败,因为您没有嵌套 main() 的第二个定义,因此它与第一个冲突。

【讨论】:

  • 好的先生,您能否详细解释一下实际发生的情况。我通过您的链接了解到我可以使用相同的名称,所以接下来编写的主要函数是否被视为本地函数功能?
  • 我不确定我是否可以比链接文档中的更多细节。声明嵌套函数后,调用该函数的名称在该范围内将调用嵌套函数。
  • 那么现在孩子和父母是否具有相同的主要功能?
  • 这里发生的事情与fork() 创建的孩子/父母情况没有特别的关系。在一个 fork 之后,你有相同的程序作为两个独立的进程运行,大部分但不完全是相同的状态。去掉程序中的fork() 调用,并将其替换为0 - 你会看到相同的输出。基本上同样的事情正在发生,只是在一个进程中而不是两个。
  • @jackwilson 让我把这个简单化:不要使用嵌套函数。它们是仅由 GCC 实现的故障、非标准语言扩展。除了不应该使用它们之外,您实际上不需要了解它们的任何信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2015-04-27
  • 2011-05-30
  • 1970-01-01
  • 2012-07-18
  • 2011-02-07
相关资源
最近更新 更多