2011-12-01 35 views

回答

2

是的,這是合法的 - 這是毫無疑問。不過,這通常不可取。

不可取的一個原因是該函數僅在該特定函數中可用(作爲該聲明的結果);同一個文件中的其他函數不能使用該聲明(但其他函數可能包含它們自己的函數聲明 - 但是然後你重複自己,這不是一個好主意)。

此外,您失去了交叉檢查的主要好處。做到這一點的最好辦法是:

  • 如果功能是一樣的源文件中定義(和源文件外不使用),然後限制其範圍的文件(static或匿名命名空間,或在適當的其他命名空間),並確保它在使用之前被定義或聲明。
  • 如果函數是在不同的源文件中定義的,則應該有一個聲明函數的頭文件。在定義函數的文件(以確保頭中的聲明與定義一致)以及使用該函數的文件中包含頭文件。

這樣,如果您需要更改函數聲明,則追蹤的位置更少。如果您在多個位置聲明函數,則必須一次更改所有聲明。當然,對於足夠徹底的更改(額外的參數或更少的參數),您將不得不修改對函數的調用;對於其他更改(例如,將一個const限定符添加到參數或將值從傳遞值更改爲傳遞參考),您可能不需要更改源中的任何內容;一個簡單的重新編譯可能就足夠了。

5

很明顯,最好將原型放在自己的頭文件中;任何功能:)

然而之外,這是合法的:

#include <stdio.h> 

int 
main (int argc, char *argv[]) 
{ 
    void foo(); 

    foo(); 
    return 0; 
} 

void foo() 
{ 
    printf ("Foo!\n"); 
} 
相關問題