有些時候,我看到的功能定義如下:爲什麼在括號外聲明參數類型?
read_dir(dir)
char *dir;
{
DIR * dirp;
struct dirent *d;
/* open directory */
dirp = opendir(dir);
......... so on
這裏有什麼說法
char *dir;
的重要性是什麼內涵後面的函數名後不久宣佈的指針,然後啓動函數體。
有些時候,我看到的功能定義如下:爲什麼在括號外聲明參數類型?
read_dir(dir)
char *dir;
{
DIR * dirp;
struct dirent *d;
/* open directory */
dirp = opendir(dir);
......... so on
這裏有什麼說法
char *dir;
的重要性是什麼內涵後面的函數名後不久宣佈的指針,然後啓動函數體。
這是一個較舊的C語法,kalled「K&R C」,因爲它是在legendary book的原始版本中出現的。
曾經被認爲是這樣寫的:
foo(a, b)
int a;
int b;
{
}
現在
int foo(int a, int b)
{
}
它僅僅是「舊式」 K&R C函數的定義(見Kernighan & Ritchie's book,通常簡稱爲Kernighan的&裏奇)
你指的可能已被寫入在八十年代末的代碼,或考慮到可移植性(即與較老的編譯器兼容,可能在更多「異國情調」的平臺上)。
即使是1989年C標準公佈後,多年來ķ& RC仍認爲是「最小公分母」到C程序員限制自己,當最大的可移植性需要,因爲許多老的編譯器仍處於使用,因爲精心編寫的K & RC代碼也可以是合法的標準C.
有人可能會認爲中K & R風格定義,由編譯器仍然支持,可讀性更強,這其實不一定是真實的;比較:
some_function(param1,param2,param3)
char *param1; /* param1 comment */
int param2; /* param2 comment */
short param3; /* param3 comment */
{
}
與
/* notice also that return type is explicitly specified now */
int
some_function(
char *param1, /* param1 comment */
int param2, /* param2 comment */
short param3 /* param3 comment */
)
{
}
ķ& R風格定義已經過時自1989年以來;參見 第6.9.5節C90標準中的「功能定義」。