2013-01-09 200 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

相關問題