2007年7月16日星期一

预编译开关#line的解释

  • 预定义的宏名
     
     为了有助于得到一些程序员需要的信息,在ANSI标准C编译程序中,提供了5个宏名,它们是:
     __LINE__ :含有当前编译行的行号。例如,下例最后编译的是第三行,所
           以宏名 __LINE__的值是3。
     __FILE__ :含有当前编译的源文件的文件名。例如,下例编译的是源文
           件"macro.c"所以宏名__FILE__指出的是字符串"macro.c"。

     __DATE__ :含有源文件被编译成目标文件时的日期(月 日 年)。
    例如,下例源文件"macro.c" 被编译成目标
    文件"macro.obj"的日期是"Jun 15 2002"。
     __TIME__ :含有源文件被编译成目标文件的时间(时:分:秒)。例如,
    下例源文件"macro.c" 被编译成目标文件"macro.obj"的时间
          是"16:42:11"。
     __STDC__ :如果其值为1,表示使用的是标准版本。否则,表示使用的是
    非标准版本。

    例如,有C程序macro.c如下:

    #include main(){
      printf("%s *** %d line *** %s        
    ***%s\n",__FILE__,__LINE__,__DATE__,__TIME__);
     }

    运行结果是:
    macro.c *** 3 line *** Jun 15 2002 *** 16:42:11


  • line命令

    #line预编译语句用于更改宏名__FILE__和__LINE__所指的字符串内容。其一般形式是:
        #line number ["filename"]
    其中:
    number是任意正整数,它指出源文件中#line预编译语句所在位置之后的第一个C语句的行号是number。其实,#line number构成了一个行计数器,number指出了行号从几开始计数。例如:

    #include
    #line 100
    main()
    { printf("%d\n", __LINE__); }
     由于行计数器从100开始计数,所以printf("%d\n", __LINE__)语句的行号是102。
     "filename" 这是一个可省缺的项。使用时给出源文件名,它将作为宏名__FILE__所指的字符串。

没有评论: