16

行番号とファイル名をエラーハンドラーに渡すマクロがあります。

#define SYSTEM_FAILURE (error_code, comment) \
   System_Failure((error_code), (comment), __LINE__, __FILE__);

__LINE__インライン関数内で使用すると、どのように解決されますか?

file.h:
inline int divide(int x, int y)
{
    if (y == 0)
    {
        SYSTEM_FAILURE(ENUM_DIVIDE_BY_ZERO, "divide by zero error");
    }
    return x/y;
}

__LINE__ヘッダーファイル内の行番号、またはインライン関数が呼び出されるソースファイルの行番号が含まれますか(コンパイラがソースコードに「貼り付け」を行うと想定)?

4

3 に答える 3

22

CおよびC++では、マクロは(ほとんどの場合)実際のコードの知識で評価されず、コードの前に処理されます(したがって「プリプロセッサ」という名前が付けられています)。したがって、__FILE__「file.h」と評価され、file.hに表示される__LINE__行に対応する行番号と評価されます。SYSTEM_FAILURE

于 2012-06-26T19:07:13.193 に答える
7

マクロはコンパイル前に定義に置き換えられるため__LINE__、マクロを使用したファイルの実際の行がに含まれます。インライン化は、この動作にはまったく影響しません。

于 2012-06-26T19:06:29.930 に答える
6

__LINE__プリプロセッサはコンパイラがそれを見る前にそれを評価するので、ヘッダーファイルの行になります。

于 2012-06-26T19:06:52.717 に答える