C语言编译预处理
2017-07-18 14:53
155 查看
1.日志打印
#define LOG(S) do{ \
time_t t; \
struct tm* localtime; \
t = time(NULL); \
localtime = localtime(&t); \
printf(“%s [%s:%d] %s\n”,asctime(localtime),_FILE_,_LINE_,s); \
}while(0)
2.条件编译(在预处理时处理,不是在运行时处理)
#define A 1
int main()
{
#if(A == 1)
printf(“first\n”);
#else
printf(“second\n”);
#endif
return 0;
}
编译后只有first在程序中,second被自动删除。
3.条件编译头文件(a.h包含b.h)
a.h
#include<b.h>
b.h
int a = 1;
#include<stdio.h>
#include<a.h>
#include<b.h>
int main()
{.....}
此时编译将出错; 修改b.h添加:#ifndef _B_H_ #define _B_H_
4.#error使用(#error是自己定义的错误信息error)
#ifndef A
#warning please define B
#error no define A
#endif
5.#line使用(重定义_LINE_和_FILE_)
#line 10 “hello.c” //当前为第一行 (执行效果:define为第10行,下面的文件名为hello.c)
#define A a
6.#运算符(将#后的参数转化为字符串)
#define CHAR(x) #x
Int main()
{
printf(“%s\n”,CHAR(100)); //相当于printf(“%s\n”,”100”);
}
7.##运算符(连接符)
#define NAME(n) name##n
int main()
{ int NAME(1); NAME(1) = 1; //相当于int name1;name1 = 1; }
实际应用:
#define STRUCT(type) typedef struct _tag_##type type;struct _tag_##type
STRUCT(student)
{ char* name; int age; }
定义了一个student结构体。
#define LOG(S) do{ \
time_t t; \
struct tm* localtime; \
t = time(NULL); \
localtime = localtime(&t); \
printf(“%s [%s:%d] %s\n”,asctime(localtime),_FILE_,_LINE_,s); \
}while(0)
2.条件编译(在预处理时处理,不是在运行时处理)
#define A 1
int main()
{
#if(A == 1)
printf(“first\n”);
#else
printf(“second\n”);
#endif
return 0;
}
编译后只有first在程序中,second被自动删除。
3.条件编译头文件(a.h包含b.h)
a.h
#include<b.h>
b.h
int a = 1;
#include<stdio.h>
#include<a.h>
#include<b.h>
int main()
{.....}
此时编译将出错; 修改b.h添加:#ifndef _B_H_ #define _B_H_
4.#error使用(#error是自己定义的错误信息error)
#ifndef A
#warning please define B
#error no define A
#endif
5.#line使用(重定义_LINE_和_FILE_)
#line 10 “hello.c” //当前为第一行 (执行效果:define为第10行,下面的文件名为hello.c)
#define A a
6.#运算符(将#后的参数转化为字符串)
#define CHAR(x) #x
Int main()
{
printf(“%s\n”,CHAR(100)); //相当于printf(“%s\n”,”100”);
}
7.##运算符(连接符)
#define NAME(n) name##n
int main()
{ int NAME(1); NAME(1) = 1; //相当于int name1;name1 = 1; }
实际应用:
#define STRUCT(type) typedef struct _tag_##type type;struct _tag_##type
STRUCT(student)
{ char* name; int age; }
定义了一个student结构体。
相关文章推荐
- C语言-预处理指令2-条件编译
- 【C语言】预处理指令—条件编译
- 【C语言】了解编译过程、熟悉预处理的标识符
- C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
- C语言条件编译与预处理
- C语言条件编译及编译预处理
- C语言预处理命令之条件编译
- C语言条件编译及编译预处理阶段
- C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
- C语言和c++预处理命令之条件编译(#ifdef,#else,#endif,#if等)
- C语言预处理 编译 汇编 链接四个阶段
- C语言——条件编译及编译预处理阶段
- C语言的编译预处理
- c语言编译01--预处理--头文件的结构和用途
- 【转】C语言条件编译及编译预处理阶段
- 【C语言】编译预处理
- C语言条件编译及编译预处理阶段
- C语言编译预处理技术一本道来
- C语言预处理命令之条件编译
- c语言的预处理指令分3种 1> 宏定义 2> 条件编译 3> 文件包含