C++ ファイルの先頭にある定義はプリプロセッサ ディレクティブであることを知っているため、「コードの実際のコンパイルが開始される前にプリプロセッサが実行されるため、ステートメントによってコードが生成される前に、プリプロセッサはこれらすべてのディレクティブをダイジェストします [1]」。
次の簡単な例があるとしたらどうなるでしょうか。
#define PRINT(function) printFnctionName(#function)
void printFnctionName(string name)
{
cout << name;
}
void test(){};
int main(int argc, char *argv[])
{
PRINT(test);
}
では、私の質問は、どの関数が渡されるかをプリコンパイラがどのように認識しているのかということです。そして、事前コンパイル/リンク/コンパイルは実際にどのように行われていますか?
また、通常の関数ではなく定義を使用している理由は、関数の名前を取得するためにこの機能を複製する方法を見つけることができなかったためです。