古いファイルの1つにコードがいくつか見えました。関数ポインタの宣言と関数の定義をまとめて
void (*const m_exec[N_EXECS])(void) =
{
#define PROCESS_DEF_TIMED(name) name, // defines macro for use in proclist.h
#define PROCESS_TIMED // define switch for section in proclist.h
#include "proclist.h"
#undef PROCESS_TIMED // undefine switch
#undef PROCESS_DEF_TIMED // undefines macro
};
このコードの意味を理解できません。これは、宣言と関数の定義を一緒にした関数ポインタですか?しかし、以下のような同様の関数ポインタを宣言しようとすると、コンパイルエラーが発生する
void (*voidFptr)(void) =
{
printf("Hello\n");
}
ここでも#defineとは何ですか?なぜこれが機能の中にあるのか分からない。
'' proclist.h "'に含まれるリストから関数ポインタの配列を取り込みます。 –
ファイルをプリプロセッサで実行し、前処理された出力を確認します。 –
ヘッダーファイルを見ましたか?たぶんオリジナルの構文があなたのものと違うことに気付くかもしれません。プログラムコードでは、コメントや文字列リテラルでも、すべての文字が重要です。 – Olaf