预定义宏的__FILE __,_ _ _ _,_ _ func __,字符串化(#)如何工作?

Som*_*ken 3 c++ macros

如果我的编译器支持这些预定义的宏(__FILE__, __LINE__, __func__),那么我可以安全地使用它们并假设它将始终根据以下内容报告正确的文件和行:__ FILE __, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

我还读到变量名,行号等与执行的程序集结束代码(从.cpp代码生成的实际.exe文件)无关,如果是这种情况那么这些宏在使用时如何工作在代码?如何__LINE__用汇编代码表示宏?.exe文件在遇到__LINE__宏时如何知道原始.cpp源的正确行号?

Col*_*Two 9

LINE宏如何用汇编代码表示?

不是.这些是预处理器宏.预处理器运行后,它们将被文字替换.

例如,如果您有此代码:

void foo() {
    printf("%d", __LINE__);
}
Run Code Online (Sandbox Code Playgroud)

预处理器将把它变成这样:

void foo() {
    printf("%d", 2);
}
Run Code Online (Sandbox Code Playgroud)