2017-01-03 6 views
4

次のように私はいくつかのライブラリをダウンロードして、それは関数を宣言:関数宣言におけるこのマクロの役割は何ですか?

#if !defined(__ANSI_PROTO) 
#if defined(_WIN32) || defined(__STDC__) || defined(__cplusplus) 
# define __ANSI_PROTO(x)  x 
#else 
# define __ANSI_PROTO(x)  () 
#endif 
#endif 

int httpdAddVariable __ANSI_PROTO((httpd*,char*, char*)); 

ここ__ANSI_PROTOの役割はどのようなものですか?それがこれをサポートしていませんでした、単に

int httpdAddVariable (httpd*,char*, char*); 
+0

の有無にかかわらず、関数と引数を宣言するためのマクロ* ANSI Cプロトタイプ –

+1

おそらく引数シグニチャがない初期のCコンパイラに対処するには? – chux

答えて

7

事前ANSI Cの宣言に好まれる理由:

int httpdAddVariable(); /* = arguments unspecified*/ 

だから、マクロが何をするかです:

int httpdAddVariable (httpd*,char*, char*); 

これだけがサポート。プロトタイプサポートが検出された場合は、引数型を宣言にペーストします。さもなければ、それはちょうど()を貼ります。

+1

コードからこのマクロのすべての外観を安全に削除できますか? –

+4

はい。 (古代のコンパイラをサポートする予定がない限り)。 – PSkocik

関連する問題