c语言中的#line

#line指令用于改变 __LINE__和__FILE__的内容.

__LINE__和__FILE__都是编译程序中预定义的标识符,其中标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名.

#line的一般形式是:#line   number"filename"

  其中,number是正整数并变成__LINE__的新值;可选的"filename"是合法文件标识符并变成__FILE__的新值.

#line主要用于调试和特殊应用.

#line的使用实例:

 1 #include  <stdio.h>
 2 #line 200"NewFileName"
 3 int main()                    //从此处起行号为200
 4 {                            //201
 5     printf("%s\n",__FILE__);//#line重命名文件为NewFileName
 6     printf("%d\n",__LINE__);//行号为203
 7     printf("%d\n",__LINE__);//204
 8     printf("%d\n",__LINE__);//205
 9     return 0;
10 }

运行结果为:

NewFileName
203
204
205

附注:

__DATE__:用于记录源文件被编译成可执行文件的日期

__TIME__:用于记录源文件被编译成可执行文件的时间

__STDC__:指示编译器是否使用ANSI C标准

查看方式:

printf("%s\n",__DATE__);//编译文件的日期
printf("%s\n",__TIME__);//编译文件的时间
printf("%d\n",__STDC__);//指示编译器是否使用ANSI C标准

时间: 2024-10-18 03:43:11

c语言中的#line的相关文章

转载--C语言中的__FILE__、__LINE__和__func__

作    者:taric_ma 链    接:C语言中的__FILE__.__LINE__和__func__ 原链接:C语言中的__FILE__.__LINE__和__func__ C语言中的__FILE__用以指示本行语句所在源文件的文件名,举例如下(test.c): #include <stdio.h> int main() { printf("%s\n",__FILE__); } 在gcc编译生成a.out,执行后输出结果为: test.c 在windows的vc6.

python语言中的编码问题

在编程的过程当中,常常会遇到莫名其妙的乱码问题.很多人选择出了问题直接在网上找答案,把别人的例子照搬过来,这是快速解决问题的一个好办法.然而,作为一个严谨求实的开发者,如果不从源头上彻底理解乱码产生的机制,并由此寻求解决问题的根本路径,那么永远不能从码农的阴影中摆脱出来.下面就来一起了解一下计算机编码问题的来龙去脉. ASCII 众所周知,计算机中的所有数据,不论是文字.图片.视频.还是音频文件,本质上最终都是按照类似 01010101 的二进制形式存储的.然而,计算机中的字符,并不能完全以这种

(转)C语言中长度为0的数组

前面在看Xen的源码时,遇到了一段代码,如下所示: 注意上面最后一行的代码,这里定义了一个长度为的数组,这种用法可以吗?为什么可以使用长度为0 的数组?长度为的数组到底怎么使用?……这篇文章主要针对该问题进行简单的讲解.废话不多说了,现在就开始. 长度为的数组在标准c和c++中是不允许的,如果使用长度为的数组,编译时会产生错误,提示数组长度不能为.但在GNUc中,这种用法却是合法的.它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理.如果你将上面的长度为的

C 语言中的基本语法要点

计算机语言的发展史: 机器语言---->汇编语言 ----> 高级语言( 1.面向过程  2.面向对象) 任何一个c程序是由一个或者多个程序段构成的,每个程序段都有自己的弄能,我们一般称这些程序段为函数.所以说c语言的程序都有由函数构成的 编译:把C语言代码翻译成0和1,它只会检测语法是否错误,不会检测main函数是否存在 工具:clang编译器  clang编译器需要安装 command line tools 指令: cc –c 文件名.c 编译成功,会生成一个.o文件 链接:其实就是把我们

语言中结构体变量和结构体类型的定义

1.结构体类型定义 定义方式1: Typedef struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 } *LinkList; 定义方式2: struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 }: Typedef struct  LNode  *LinkList; 以上两个定义方式是等价的,是将*LinkList定义

在C语言中以编程的方式获取函数名

调试常用的 __FILE__, __FUNCTION__, __LINE__ 调试常用的 __FILE__, __FUNCTION__, __LINE__ 没想到 VC6 不支持 __FUNCTION__ 所以我写了如下的奇怪代码 //用来记录当前行和当前函数//也可说是记录 堆栈void log_stack(const char *file, int line, const char * function); //当然还要对 __FUNCTION__ 宏作点修饰,因为这个宏只是在函数里面才起作

Python语言中循环引用(import)失败的解决方案

最近在开发智能家居项目hestia-rpi项目中,由于代码结构层级划分不合理,导致了循环引用(import)module失败的问题,错误如下: 1 2 3 4 5 6 7 8 9 10 Traceback (most recent call last):   File "./main.py", line 8, in &amp;lt;module&amp;gt;     from hestiarpi.library.server import server   File

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一个代码会被执行 3.一个if语句中只能以if开头,最多只能有一个else,可以有任意个else if switch(表达式){ case 常量: ... break; case 常量1: ... break; default: ... break; } : 使用场景:当一个变量只有几个固定的取值的时

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回