为了进行调试,我可以在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)

推荐答案

您应该使用预处理器宏__LINE____FILE__.它们是预定义的宏,是C/C++标准的一部分.在预处理过程中,它们分别被一个常量字符串替换,该字符串包含一个表示当前行号的整数和当前文件名.

其他预处理器变量:

  • __func__:函数名称(这是C99的一部分,不是所有C++编译器支持的)
  • __DATE__:格式为"Mmm dd yyy"的字符串
  • __TIME__:形式为"hh:mm:ss"的字符串

您的代码将是:

if(!Logical)
  printf("Not logical value at line number %d in file %s\n", __LINE__, __FILE__);

C++相关问答推荐

Zig将std.os.argv转换为C类型argv

从STdin读写超过4096个字节

GCC引发不明确的诊断消息

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

X86/x64上的SIGSEGV,由于原始内存访问和C中的DS寄存器之间的冲突,在Linux上用TCC编译为JIT引擎

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

进程在写入管道时挂起

在循环中复制与删除相同条件代码的性能

函数的限制限定指针参数允许优化调用方函数吗?

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

C11/C17标准允许编译器清除复合文字内存吗?

Fprintf正在写入多个 struct 成员,并且数据过剩

C:如何将此代码转换为与数组一起使用?

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

基于蝶数恰好有8个除数的事实的代码

将size_t分配给off_t会产生符号转换错误

malloc 属性不带参数

使用邻接表创建图

clion.我无法理解 Clion 中发生的 scanf 错误