由於
1: #include <iostream>
2:
3: #define FOO std::cout << __LINE__ << ' ' \
4: << __LINE__ << '\n';
5: int main()
6: {
7: FOO // the first two __LINE__s come from here, that's one line of code
8:
9: std::cout << __LINE__ << ' ' \ // 3rd __LINE__ comes from here
10: << __LINE__ << '\n'; // 4th __LINE__ comes from here
11: }
__LINE__
擴展到的物理線路,而不是邏輯線路:
電流源線的行號比新行字符讀取的數目多一個或者在翻譯階段1(2.2)中引入,同時將源文件處理爲當前令牌。
雖然通過\
結束了線在轉換階段2
被連接的其他唯一合乎邏輯的實現是打印3和4 FOO的調用,但這似乎不是很有用。
您還可以通過以下方式查看:__LINE__
與任何其他宏沒有任何區別。它只是在每行開始時由編譯器自動更新。所以代碼是這樣解釋的:
#include <iostream>
#define __LINE__ 3
#define FOO std::cout << __LINE__ << ' ' \
<< __LINE__ << '\n';
int main()
{
#define __LINE__ 7
FOO
#define __LINE__ 9
std::cout << __LINE__ << ' ' \ // Yeah, you're right
#define __LINE__ 10
<< __LINE__ << '\n';
}
這不是有效的代碼,但它演示了事情是如何工作的。應用通常的宏擴展規則,你會得到你得到的輸出。
+1,非常明確的描述 – 2010-11-27 11:27:58