zoukankan      html  css  js  c++  java
  • #line 的作用是改变当前行数和文件名称

    #line 的作用是改变当前行数和文件名称,它们是在编译程序中预先定义的标识符命令的基本形式如下:
       #line number["filename"]
    其中[]内的文件名可以省略。例如:
       #line 30 a.h
    其中,文件名a.h 可以省略不写。


    这条指令可以改变当前的行号和文件名,例如上面的这条预处理指令就可以改变当前的行号为30,文件名是a.h。初看起来似乎没有什么用,不过,他还是有点用的,那就是用在编译器的编写中,我们知道编译器对C 源码编译过程中会产生一些中间文件,通过这条指令,可以保证文件名是固定的,不会被这些中间文件代替,有利于进行分析。

    如果程序里面加了# line 100 "other_file" ,程序是不是就会执行other_file里面的100行代码,到底是不是这个意思?

    自己试一试就知道了,这种问题还要问人怎么成高手?

    关于#line
    命令#line改变_LINE_与_FILE_的内容,它们是在编译程序中预先定义的标识符。
    命令的基本形式如下:
    # line number["filename"]
    其中的数字为任何正整数,可选的文件名为任意有效文件标识符。行号为源程序中当前
    行号,文件名为源文件的名字。命令# l i n e主要用于调试及其它特殊应用。
    例如,下面说明行计数从1 0 0开始;printf( ) 语句显示数1 0 2,因为它是语句#line 100后的
    第3行。
    #line 100 /* 初始化行计数器* /
    main ( ) /* 行号100 */
    { /* 行号101 */
    printf("%d "_LINE_) ; /* 行号102 */
    }

    然后就很容易理解了

    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    { printf("current line number %d ,current file %s ",__LINE__,__FILE__);
    # line 100 "other_file"
    printf("current line number %d ,current file %s ",__LINE__,__FILE__);
    return 0; }

    只是为了方便调试而已
    __LINE__ __FILE__输出当前代码所在行、所在文件,当程序很复杂的时候,运行时错误,打印错误信息时加上行号容易定位
    __FUNCTION__ 输出当前函数名
    __DATE__ 宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。
    __TIME__ 宏指令包含程序编译的时间。时间用字符串表示,其形式为: 分:秒

    其它:error,pragma,line预处理

  • 相关阅读:
    Vue中父子组件的通讯
    字符串svg代码转 base64 url
    Vue 中封装 websocket
    vue中使用Echarts,销毁原有的图表进行重新赋值
    Vue中常用表格(增删改查)
    刷新组件
    hdu1272小希的迷宫(并查集+判环)
    九余数定理
    Runtime Error可能的情况
    hdu2035 人见人爱A^B题解
  • 原文地址:https://www.cnblogs.com/timssd/p/4078061.html
Copyright © 2011-2022 走看看