Visual Studio 2010 C ++编译器 - 编译时获取当前行号

时间:2010-01-27 00:04:05

标签: c++ c compiler-construction visual-studio-2010

我有一个关于如何在编译VS C ++编译器时获取当前行号的问题, IF 当然可能。 我知道可以使用预处理器中的LINE Macro,但我得到的结果不正确(好吧,至少不是我想要的)。

请告诉我可能的:))

提前致谢

编辑: 我想我在使用__LINE__宏时发现了错误。我觉得现在有点傻了......我想我必须去睡觉(过了一段时间你不会创造/添加任何新东西,但是破坏你到目前为止所做的事情)。问题解决了,谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

好的......解释得更好一点,因为我认为你误解了__LINE__宏的含义......

考虑三个源文件:

/* Source1.c */
...list of headers & functions ....
if (!(fp = fopen("foo.blah", "r"))){
   fprintf(stderr, "Error in %s @ line: %d: Could not open foo.blah\n", __FILE__, __LINE__);
}

/* Source2.c */
...list of headers & functions ....
if (!(p = (char *)malloc((10 * sizeof(char)) + 1)))){
   fprintf(stderr, "Error in %s @ line: %d: Could not malloc\n", __FILE__, __LINE__);
}

/* Source3.c */
...list of headers & functions ....
if (!(ptr = (char *)malloc((50 * sizeof(char)) + 1)))){
   fprintf(stderr, "Error in %s @ line: %d: Could not malloc\n", __FILE__, __LINE__);
}

假设这三个文件被编译并链接到一个名为foo.exe的可执行文件中,并且出现了运行时错误,除了嫌疑之外,你会得到:

Error in source2.c @ line 25: Could not malloc
Error in source1.c @ line 50: Could not open foo.blah
Error in source3.c @ line 33: Could not malloc

项目来源的总行数(行数)表示这些行不同步,无论预处理的是什么。我希望我已经解释了在帮助您使用__LINE__宏背后的理由时更容易理解。

希望这有帮助, 最好的祝福, 汤姆。