#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\n"_LINE_) ; /* 行号102 */
}

然后就很容易理解了

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

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

其它:error,pragma,line预处理

时间: 2024-07-29 04:55:08

#line 的作用是改变当前行数和文件名称的相关文章

宏定义之二(连接符,可变參数,文件名称,行号,函数名)

宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等 转自 http://blog.csdn.net/yiya1989/article/details/7849588 先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等 宏变量: 先举一个样例,会用到上面这些宏: [cpp] view plaincopy #define myprintf(...) printk("[lch]:F

WebX5 Data判断当前行的值是否改变,以及改变当前行的状态

var Data = require("$UI/system/components/justep/data/data"); //引用data,找到data的js文件引用进来 var data = this.comp("a"); var CurrRow = data.getCurrentRow(); if (data.getRowState(CurrRow) === Data.STATE.EDIT) {//Data.STATE.EDIT=edit //判断当前行是否等

改变jupyter notebook默认初始文件路径

jupyter notebook home path changing - %USERFROFILE% and Configure file 如何改变jupyter notebook默认初始文件路径,网上都提供了很多方法.Link1 , Link2 但他们都没让你这样测试: [Win] + R , "cmd", 在windows命令行运行: C:/ProgramData/Anaconda3/python.exe C:/ProgramData/Anaconda3/Scripts/jupy

txt文件分解为固定条数的文件

#-*- coding: UTF-8 -*- # import linecache # count = linecache.getline(filename,linenum) # 读取文件某一行的内容 # str = linecache.getlines(filename) # str为列表形式,每一行为列表中的一个元素 import sys import linecache reload(sys) sys.setdefaultencoding( "utf-8" ) # 分解一个txt

判断cache Line的作用

/*求一个二维数组每一列的和,用以测试计算机使用cache line方法后采用不同编写方式所带来的程序运行时间的差异*/#include<iostream>#include <time.h>using namespace std;int main() { //初始化 int I = 10000, J = 10000, i = 0, j = 0; int **d = new int*[I]; int * clomun = new int[I]; for (i = 0; i <

如何改变linux系统的只读文件的权限

vim 编辑可以在命令模式输入 :wq! 保存退出可以用chmod 命令修改文件权限. chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法.用法:文字设定法:chmod [who] [+ | - | =] [mode] 文件名¼命令中各选项的含义为:操作对象who可是下述字母中的任一个或者它们的组合:u 表示逗用户(user)地,即文件或目录的所有者.g 表示逗同组(

使用awk按照行数切割文件

最近在做一个事情,需要将一个文本文件按照行数进行切割,然后用了,awk的方法,感觉很好用, 记录一下. 脚本如下: #!/bin/bash ## 文件效果: 根据行数来切割文件 ## 参数1为要切割的文件名 ## 参数2为每个切割后文件的行数 filename=$1 fileline=$2 echo "filename=$filename" echo "fileline=$fileline" awk -v count=$fileline 'BEGIN{i=0} {

40亿个有序不同的数的文件中找一个缺失的数

编程珠玑第二题... 如果是用位图的话... 如果内存不够,那么就需要二分,注意思想就是先找到中间数mid,然后把文件以mid分为两个文件,肯定丢失的数在数目小的那个文件中,然后递归去那个小的文件中找就行了. 复杂度是o(2n)  n+n/2+n/4+n/8+..... 看了别人写了一个代码: int split(int* a, int* b, int*c, int alen, int bit) { int biter, citer, i; int v=0, re = 0, *t; while(

(转)Java按指定行数读取文件

package test import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; public class ReadSelectedLine{ // 读取文件指定行. static void readAppointedLineNumber(File sourceFile, int lineNumber) throws IOExcepti