您的位置:首页 > 编程语言 > C语言/C++

C语言-预编译

2016-07-14 01:37 441 查看
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语言