我有一个关于如何在编译 VS C++ 编译器时获取当前行号的问题,IF当然是可能的。 我知道可以使用预处理器中的 LINE 宏,但我得到的结果不正确(好吧,至少不是我想要的)。
请告诉我这可能:)
提前致谢
编辑: 我想我发现我使用
__LINE__
宏的错误。我现在感觉有点愚蠢..我想我必须去睡觉(一段时间后,你不再创建/添加任何新的东西,而是破坏你迄今为止所做的事情)。问题已解决,感谢大家的帮助!
好的...更好地解释一下,因为我认为您误解了
__LINE__
宏的含义...
考虑三个源文件:
/* Source1.c */ ...标题和函数列表.... if (!(fp = fopen("foo.blah", "r"))){ fprintf(stderr, "%s @ 行中出现错误: %d: 无法打开 foo.blah ", __FILE__, __LINE__); } /* Source2.c */ ...标题和函数列表.... if (!(p = (char *)malloc((10 * sizeof(char)) + 1)))){ fprintf(stderr, "%s @ 行中出现错误: %d: 无法进行 malloc ", __FILE__, __LINE__); } /* Source3.c */ ...标题和函数列表... if (!(ptr = (char *)malloc((50 * sizeof(char)) + 1)))){ fprintf(stderr, "%s @ 行中出现错误: %d: 无法进行 malloc ", __FILE__, __LINE__); }
假设这三个文件被编译并链接到一个名为
foo.exe
的可执行文件中,并且出现运行时错误,撇开挑剔不谈,你会得到:
source2.c 第 25 行出现错误:无法进行 malloc source1.c 第 50 行出错:无法打开 foo.blah source3.c 第 33 行出错:无法进行 malloc
以行数表示的项目源的总大小,并不意味着这些行不同步,无论预处理了什么。我希望我已经向您解释了一些更容易理解的内容,以帮助您推理使用
__LINE__
宏。
希望这有帮助, 此致, 汤姆.