在C語言的函數(shù)定義上,我們通常都是用的函數(shù)定義方式為ANSI-C的函數(shù)定義方式。但是在C語言之父創(chuàng)立C語言之時,函數(shù)的定義形式并非現(xiàn)在我們所見到的形式。下面的代碼顯示了這樣的差別,注意觀察二者在聲明與函數(shù)體簽名上的差別。
#include <stdio.h>
#include <stdlib.h>
/*K&R Standard==============start===================*/
const char* originalFunc();
/*K&R Standard---------------end--------------------*/
/*ANSI Standard=============start===================*/
const char* ANSIFunc(char param1, char* param2);
/*You also can define the function like below.
* const char* ANSIFunc(char ,char*); */
/*ANSI Standard--------------end--------------------*/
int main() {
printf("const char* originalFunc(param1,param2):%s\n", originalFunc('a',
"word"));
printf("const char* ANSIFunc(param1,param2):%s\n", ANSIFunc('a', "word"));
return EXIT_SUCCESS;
}
/*K&R Standard==============start===================*/
const char* originalFunc(param1, param2)
char param1;char* param2; {
printf("param1:%c\nparam2:%s\n", param1, param2);
return "originalFunc";
}
/*K&R Standard---------------end--------------------*/
/*ANSI Standard=============start===================*/
const char* ANSIFunc(char param1, char* param2) {
printf("param1:%c\nparam2:%s\n", param1, param2);
return "ANSIFunc";
}
/*ANSI Standard--------------end--------------------*/
K&R的風(fēng)格與ANSI-C的比,K&R風(fēng)格又稱為identifier-list,而另一種風(fēng)格則又稱為declarator,其中originalFunc(param1, param2) 即為這個declarator。事實(shí)上兩種風(fēng)格在ANSI 99 標(biāo)準(zhǔn)中(6.9.1節(jié))都有定義,只不過我們更推崇declarator的方式。因?yàn)樗鼘?shù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而標(biāo)識符列表的方式則沒有進(jìn)行這項(xiàng)操作。