C / C ++ / C#的新手。有没有办法使用__LINE__
返回通过stdio.h读取的输入文件的当前行号(例如,getchar())?如果没有,还有另一种更好的方法吗?
答案 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 ++输入函数/对象来读取行并在读取它们时对它们进行计数。