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

问题描述 投票:0回答:1

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

请告诉我这可能:)

提前致谢

编辑: 我想我发现我使用

__LINE__
宏的错误。我现在感觉有点愚蠢..我想我必须去睡觉(一段时间后,你不再创建/添加任何新的东西,而是破坏你迄今为止所做的事情)。问题已解决,感谢大家的帮助!

c++ c visual-studio-2010
1个回答
3
投票

好的...更好地解释一下,因为我认为您误解了

__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__
宏。

希望这有帮助, 此致, 汤姆.

© www.soinside.com 2019 - 2024. All rights reserved.