C语言中定义的__FILE__使用,如何只出现该文件名,而不显示路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中定义的__FILE__使用,如何只出现该文件名,而不显示路径相关的知识,希望对你有一定的参考价值。
可以用宏定义来实现去除文件名中的路径名。
因为windows和linux下,文件名中的路径分隔符号不同,windows中是"/",而linux中是"/",所以,采用的宏不同:
#include <string.h> //strrchr()函数所需头文件windows:
#define filename(x) strrchr(x,'\\\\')?strrchr(x,'\\\\')+1:x
linux:
#define filename(x) strrchr(x,'/')?strrchr(x,'/')+1:x
调用:
printf("filename:%s\\n", filename(__FILE__) );
相关函数说明:
函数原型:char *strrchr(const char *s, int c);
函数功能:The strrchr() function returns a pointer to the last occurrence of the character 【c】 in the string 【s】.函数返回一个指向最后一次出现在字符串s中的字符c的位置指针,如果c不在s中,返回NULL。
PS:linux中提供了相应的函数:basename(s),用来获取不带路径的文件名。
参考技术A _splitpathhttp://baike.baidu.com/link?url=TNNFmaVoq-InvbzkiIcWtL6C6zULzsGklk0-2R20QvXlr5LZ3K1NNWLkJFsevUGfVSzUeI535dheDBlWqDDRNK追问
我想要的是一个类似__FILE__这样可以直接得出的,因为我要实现一个使用宏做的打印函数,如果使用你说的这个就太复杂了啊
本回答被提问者采纳FILE不是C语言关键字
FILE不是C语言关键字,只是标准C中的标准输入输出中定义的一个新的数据类型
stdio.h
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
FILE 主要用来定义带缓冲的文件指针,如:FILE *fp;
附:C语言一共有32个关键字,如下:
auto 局部变量(自动储存)
break 无条件退出程序最内层循环
case switch语句中选择项
char 单字节整型
const 定义不可更改值的变量
continue 中断本次循环,并转向下一次循环
default switch语句中的默认选择项
do 用于构成do.....while循环语句
double 双精度浮点型
else 构成if.....else选择程序结构
enum 枚举
extern 声明外部全局变量
float 单精度浮点型
for 构成for循环语句
goto 跳到程序中指定的标签位置
if 构成if....else选择结构
int 整型
long 长整型
register 定义CPU内部寄存的变量
return 用于返回函数的返回值
short 短整型
signed 有符号数 与基本整型类型结合使用
sizeof 计算表达式或数据类型的占用字节数
static 定义静态变量、函数
struct 定义结构类型
switch 构成switch选择结构
typedef 重新定义数据类型
union 联合类型
unsigned 定义无符号数据 与基本整型类型结合使用
void 定义任意类型指针void * , 无参数 , 无返回值等
volatile 易失性变量
while 用于构成do...while或while循环结构
以上是关于C语言中定义的__FILE__使用,如何只出现该文件名,而不显示路径的主要内容,如果未能解决你的问题,请参考以下文章
C语言预定义宏 __func____FUNCTION____LINE____FILE____DATE____TIME__
C语言预定义宏 __func____FUNCTION____LINE____FILE____DATE____TIME__