行号:是否可以使用__LINE__返回输入文件的行号?

时间:2013-09-27 19:03:39

标签: c++ c

C / C ++ / C#的新手。有没有办法使用__LINE__返回通过stdio.h读取的输入文件的当前行号(例如,getchar())?如果没有,还有另一种更好的方法吗?

2 个答案:

答案 0 :(得分:8)

不,__LINE__与标准输入无关。它只是由编译器宏扩展(到源代码文件中的行号)。

如果您需要计算标准输入的行数,请使用getline(3)std::getline和C ++中的朋友逐行阅读...

请勿使用fgets或旧gets

答案 1 :(得分:1)

__LINE__是一个特殊的C / C ++预处理器定义,它被转换为正在处理的源代码文件中当前行的源代码文件行号。它与实际C / C ++程序的任何输入或输出无关。

__LINE__以及另一个特殊的C / C ++预处理器定义__FILE__通常用于生成日志以提供源代码文件名(这是__FILE__定义为)和特定行号(__LINE__定义为)。

所以可能有一个日志函数,其界面看起来像log (char *pszMessage, char *pszFile, int iLineNo),你可以使用它log ("My Log message", __FILE__, __LINE__);

这些是特殊的内置定义,在打开和处理源文件时,预处理器会更改其值。

正如Basile Starynkevitch所提到的,如果你想计算行数,你需要使用一个C / C ++输入函数/对象来读取行并在读取它们时对它们进行计数。