我有一个关于如何在编译VS C ++编译器时获取当前行号的问题, IF 当然可能。 我知道可以使用预处理器中的LINE Macro,但我得到的结果不正确(好吧,至少不是我想要的)。
请告诉我可能的:))
提前致谢
编辑:
我想我在使用__LINE__
宏时发现了错误。我觉得现在有点傻了......我想我必须去睡觉(过了一段时间你不会创造/添加任何新东西,但是破坏你到目前为止所做的事情)。问题解决了,谢谢你的帮助!
答案 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__
宏背后的理由时更容易理解。
希望这有帮助, 最好的祝福, 汤姆。