2013-01-09 68 views
2

可能重复:
Nested function in C我可以调用另一个函数写入的函数吗?

在C,如果我在这个结构中写了一个程序:

main() 
{ 
    int function1(...) 
    { 
    .... 
    } 
} 

function 2() 
{ 
    function1(...) 
} 

它可以从功能2调用功能1被写入里面的主要功能? 也: 在C语言中所有的功能都是全球性的?或者在某些情况下有一些限制,即从一个函数中不能调用另一个函数?

+4

看到这个:http://stackoverflow.com/questions/2608158/nested-function-in-c – x4rf41

+5

你不能在_C_中嵌套函数,并且你不能叫他们'2'要么 –

+0

也,你可以不写在C函数没有返回类型,这是一个过时的风格不再有效,在目前的标准。 – Lundin

回答

3

你不能在上面C.

int main(void) 
{ 
    int function1(void) 
    { 
     /* ... */ 
    } 
} 

function1定义巢函数的定义是无效的。

+0

Euhm。当我尝试时,我可以。 GCC 4.6.3 –

+1

@BartFriederichs这是GNU C有效期见http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html但不是在C. – ouah

+1

@BartFriederichs谁在乎非标准GNU -goo语言?用C编译器编译。方便地,GCC也支持C语言:'-std = c99 -pedantic-errors'。 – Lundin

0

EDIT

在GNU C是可能的嵌套函数。我想这个小片段,它的工作

#include <stdio.h> 

int main() 
{ 
    void printy() { printf("hallo\n"); } 

    printy(); 
} 

像GNU C页声称http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

嵌套函数的名称是本地的定义它

逸岸,如果我改变的块我代码

#include <stdio.h> 

void func2(); 

int main() 
{ 
    void printy() { printf("hallo\n"); } 

    printy(); 

    func2(); 
} 

void func2() 
{ 
    printy(); 
} 

我得到

gcc test.c 
/tmp/ccGhju4n.o: In function `func2': 
test.c:(.text+0x3f): undefined reference to `printy' 
collect2: ld returned 1 exit status 
+0

这是太模糊,你可以声明另一个函数内部功能,但你不能定义它。然而,downvote不是我的。 – effeffe

+0

你是对的,我错了......我编辑我的职务......这是难以置信的多少事情我不知道,但我确信我知道他们 –

+0

@DavideBerra那是因为你调用'printy'外面做它被定义的范围(这是'main')。那说你不能用C做到这一点的答案是正确的,但是,如果GCC允许它作为一个扩展你还是要期待的范围一般规则适用。 – Caleb

相关问题