linux c的一些内置变量

开卷有益,挺好的。
这里简单写一下C语言的一些内置变量:
__FILE__ 这个是文件名称
__LINE__ 这个是文件对应的行数
__func__ 这个是调用函数的名称,这里不能当做函数的默认值
贴一个简单的代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;

const char* hello() { return __func__; }
const char* world() { return __func__; }


int main() {
  std::cout << hello() << "," << world() << std::endl;

  return 0;
}

这里对应的输出是
hello,world


下面写一下变长的C语言内置变量 __VA__ARGS__
变长参数宏与printf一起是一对好搭档,下面看下这个例子。

// filename: test.cc
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>

using namespace std;

#define LOG(...) {\
  fprintf(stdout, "%s: Line %d:\t", __FILE__, __LINE__);\
  fprintf(stdout, __VA_ARGS__);\
  fprintf(stdout, "\n");\
}

#define LOGE(...) {\
  fprintf(stderr, "%s: Line %d:\t", __FILE__, __LINE__);\
  fprintf(stderr, __VA_ARGS__);\
  fprintf(stderr, "\n");\
}

int main()
{
  int x = 3;
  LOG("x = %d", x);
  x++;
  LOGE("x = %d", x);

  return 0;
}

编译
g++ -g -std=c++11 test.cc -o test
在上面的代码中,用到了stdout,stderr这两个内置变量,分别表示标准输出与错误输出。还有一个stdin,这个就是标准输入。

简单说下我自己的理解,在这里由上面的这些宏定义,差不多就能实现log日志输出的一些打印。
注意,这里只能用 #define来实现,因为用函数,__FILE__ __LINE__ 这两个内置变量会变化。#define 在编译过程中是替代展开的。由上面的 stderr stdout,这样就能实现标准的输出是什么样子的了。
正常时用 LOG,用到标准输出stdout;错误的日志用 LOGE,用到错误输出stderr
下面在来看执行时的输出
./test 1>log.txt 2>log.txt.e
log.txt 文件中是 test.cc: Line 26: x = 3
log.txt.e文件中是 test.cc: Line 28: x = 4
1 代表标准输出,2代表错误输出
根据上面的define,还可以写出 WARN函数,由此就可以建立日志输出了。

其中参考了一篇博文,讲解标准输出,错误输出的文章。
https://blog.csdn.net/origin_lee/article/details/41576975

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值