出于调试目的,我可以在C/C++编译器中获取行号吗?(某些编译器的标准方式或特定方式)
e.g
if(!Logical)
printf("Not logical value at line number %d \n",LineNumber);
// How to get LineNumber without writing it by my hand?(dynamic compilation)
发布于 2010-05-17 22:27:32
您应该使用预处理器宏__LINE__
和__FILE__
。它们是预定义的宏,是C/C++标准的一部分。在预处理过程中,它们将分别替换为包含表示当前行号的整数的常量字符串和当前文件名。
其他预处理器变量:
__func__
:函数名(这是it)__DATE__
的一部分,并不是所有的C99编译器都支持it)__DATE__
:"Mmm yyyy"__TIME__
“形式的字符串:"hh:mm:ss"形式的字符串
您的代码将是:
if(!Logical)
printf("Not logical value at line number %d in file %s\n", __LINE__, __FILE__);
发布于 2010-05-17 22:27:29
作为C++标准的一部分,您可以使用一些预定义的宏。C++标准的第16.8节特别定义了__LINE__
宏。
__LINE__
**当前源代码行的行号(十进制常量)。
__FILE__
**:源文件的假定名称(字符串文字)。
__DATE__
**源文件的翻译日期(字符串...)
__TIME__
**:源文件的翻译时间(字符串...)
__STDC__
**是否预定义了__STDC__
__cplusplus
**:在编译C ++翻译单元时,名称__cplusplus
被定义为值199711L
所以你的代码应该是:
if(!Logical)
printf("Not logical value at line number %d \n",__LINE__);
发布于 2014-11-08 05:15:58
您可以使用与printf()具有相同行为的宏,只是它还包含调试信息,如函数名、类和行号:
#include <cstdio> //needed for printf
#define print(a, args...) printf("%s(%s:%d) " a, __func__,__FILE__, __LINE__, ##args)
#define println(a, args...) print(a "\n", ##args)
这些宏的行为应该与printf()相同,同时包含类似java stacktrace的信息。下面是一个main示例:
void exampleMethod() {
println("printf() syntax: string = %s, int = %d", "foobar", 42);
}
int main(int argc, char** argv) {
print("Before exampleMethod()...\n");
exampleMethod();
println("Success!");
}
这将导致以下输出:
main(main.cpp:11)在exampleMethod()之前...
exampleMethod(main.cpp:7) printf()语法: string = foobar,int = 42
main(main.cpp:13)成功!
https://stackoverflow.com/questions/2849832
复制相似问题