正如您可能从我的其他问题中看到的,许多人可能已经得到了答案。你能把这些知识分享给我吗?
答案 0 :(得分:21)
C ++03§16.8p1:
__ LINE__当前源行的行号(十进制常量)。
这将是int,或者如果INT_MAX(允许小到32,767)不够大(......我不会问......),那么它将是long int。如果它大于LONG_MAX,那么你有一个未定义的行为,这个问题在一个至少2,147,483,647行(LONG_MAX的最小允许值)的文件中不值得担心。
同一部分还列出了您可能感兴趣的其他宏。
答案 1 :(得分:5)
C ++标准简单地说:
__LINE__
:当前源行的假定行号(在当前源文件中)(整数常量)。
它实际上并没有说明类型,所以它很可能与你的源代码中的未加修整的整数相同,这将是int
。允许范围的上端为2G - 1
的事实支持这一点(即使较低范围为1
)。
#line
只允许数字(没有尾随U
使其无符号)的事实也可以被阅读以支持这一点。
但是,这只是支持。我无法在C ++或C标准中找到明确的声明。它只是有意义 * a 它会在经过预处理阶段时被翻译成类似42
的东西,这就是编译器将看到的内容,完全像42
一样对待它(int
)。
* a :这不是我的常识第一次出错: - )
答案 2 :(得分:1)
有关一般 C++ 代码,请参阅 the other answer。
在 Visual Studio 2017(以及我怀疑所有其他版本)中,__LINE__
的类型为 long
。
我使用以下代码来发现它:
#include <iostream>
#include <typeinfo>
template <typename T>
void print_type(T x)
{
std::cout << x << " has type " << typeid(x).name();
}
int main()
{
print_type(__LINE__);
}