标准C语言要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。下面预定义宏表,被我抄了下来。
C++中还定义了 __cplusplus
C语言中的__FILE__、__LINE__和__DATE__等都在头文件#include<stdio.h>中
其他说明:
如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。
__LINE__ 及 __FILE__ 宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。
__STDC__ 宏指令的意义是编译时定义的。一般来讲,如果__STDC__已经定义,编译器将仅接受不包含任何非标准扩展的标准C/C++代码。如果实现是标准的,则宏__STDC__含有十常量1。如果它含有任何其它数,则实现是非标准的。
__cplusplus 与标准c++一致的编译器把它定义为一个包含至少6为的数值。与标准c++不一致的编译器将使用具有5位或更少的数值。
#include <stdio.h>
int main(void)
{
printf("%d\n",__LINE__);
printf("%d\n",__LINE__);
printf("%d\n",__LINE__);
printf("%s\n",__FILE__);
printf("%s\n",__DATE__);
printf("%s\n",__TIME__);
return 0;
}
有些时候,需要在Log中打出进程或线程的ID,以便调试、查找问题。
获取进程ID
#include <unistd.h>
pid_t getpid(void);
获取线程ID
// 方法1
#include <sys/syscall.h>
syscall(__NR_gettid)
// 方法2
#include <sys/syscall.h>
#define gettid() syscall(__NR_gettid)
// 方法3
#include <sys/syscall.h>
#define gettid() syscall(SYS_gettid)
当只有一个线程的时候,返回的是pid。
因篇幅问题不能全部显示,请点此查看更多更全内容