define:
替换、宏函数、宏展开
不管情况,直接替换
替换字符一般大写
经常改变的常量可以用define来简化
#define N 10
#define NM (2+8)
#define f(x) x*x
#define pf(y) printf("%d", y)
标识连接符:
1. #
相当于加了双引号
#define f(x) printf("%s", #x);
int num = 0;
f(num);
put: num
2. ##
#define a(x) a##x
int a1 = 10;
int a2 = 20;
int a2 = 30;
a(1) = 39;
int i = 1;
while (i < 4)
{
printf("%d", a(i));
i++;
}
put : 39, 20 , 30
void runall()
{
printf("%d", 1000);
}
#define run(x) run##x
run(all)();
3. #@
相当于加单引号
#define a(x) #@x
putchar(N(A));
put : A
undef:
取消define的作用域
#undef N
include:
#include <> 从系统目录开始找
#include "" 先从当前目录找, 再找系统目录
if else endif:
选择性编译
#define NNN 1
#if NNN == 1
printf("1");
#else
printf("0");
#endif
重复包含
//不存在时
#ifndef X
#define X 100
#endif
//存在时
#ifdef N
#endif
error:
自写一个错误,编译时提示
pragma:
#pragma message("编译时提示消息内容");
#pragma once //当前文件在项目中只包含一次
#pragma comment(lib, "Urlmon.lib") //加载链接库
#pragma warning(disable:4996) //屏蔽错误
#pragma warning(once:错误号) //警告/错误 只显示一次
#pragma warning(error:错误号) // 把错误号信息当做一个错误
#pragma warning(default:错误号)
#pragma warning(push) //让一个 warning生效
#pragma warning(pop) //弹出坠湖一个警告信息,在入栈和出栈之间所作的
#pragma pack(1) //设置结构器字节对其 参数只有 1 2 4 8 16
#pragma date_seg() //检测进程运行次数
#pragma data_seg("exe_name")
int current_exe = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:exe_name,RWS")
if (current_exe > 0)
{
printf("程序只能运行一个");
exit(1);
}
#pragma deprecated() //限制函数作用域
#pragma deprecated(run1, run2) //限制函数run1 run2接下来不可使用
#pragma push_macro("Y") //将Y当前的值吃进
#pragma pop_macro("Y") //将之前吃入的Y还原
#define y 10
#pragma push_macro("Y") //将Y当前的值吃进
#define y 20
#pragma pop_macro("Y") //将之前吃入的Y还原
#pragma setlocale() //设置当前文件编码
#include <locale.h>
#pragma setlocale("chs") //经常放在第一行
#pragma intrinsic() //设置内联还输
#pragma function() //取消内联函数
#pragma inline_depth() //设置内联深度
#pragma inline_recuresion() // 内联开关 on oFF
#pragma hdrstop() // 设置预编译头
#pragma auto_inline() // 是否自动内联 on off
#pragma check_stack() // 自动检查栈 on off 判定会不会发生栈溢出
缓冲区设置:
缓冲区有三种方式
满缓冲,满了在写
行缓冲,一行就写
无缓冲
setvbuf(); //设置缓冲区
#define _IOFBF 0x0000 full 缓冲区满了再干活
#define _IOLBF 0X0040 line 行缓冲
#define _IONBF 0X0004 no 无缓冲
char str[4096] = {0};
setvbuf(stdout, str, _IOFBF, 4096);
fprintf(stdout, "hello world");
fflush(stdout);
__LINE__:
当前代码所在行
__TIME__:
代码编译时间
__DATE__:
代码编译时间
__FILE__:
当前文件名
__FUNCTION__:
函数名
C语言-预编译
最新推荐文章于 2024-06-12 23:44:55 发布