预处理以及定义

预处理是编译之前做的一些事情。

1. 常用的预定义符号(预先定义好的符号,代表着某种意思):

__FILE__       //当前编译的文件路径

__FUNCTION__    //当前所在函数的函数名

__DATE__         //当前编译日期

__TIME__     //当前编译时间

//以上格式占位符都用%s,如:printf("%s",__DATA__);

__LINE__   //当前行数,格式占位符用%d,如printf("%d",LINE);  //注意以上这些宏定义的前后分别有两个"_",而不是一个下划线

__CRT_SECURE_NO_WARNINGS         //关闭安全检查,在写代码时候加上

#define  _CRT_SECURE_NO_WARNINGS 可以关闭安全检查的警告

2. 宏定义

宏定义的本质就是替换

2.1 宏定义-无参宏: #define 宏名  内容

比如定义一个宏:

#define PI 3.1415926  //用PI代替3.1415926

#define A 4+3    //用A代替4+3

2.2 宏定义-带参宏: #define 宏名(参数列表) 内容

带参宏类似一个函数,和函数的区别是参数是没有类型的、带参宏没有返回值。注意调用的时候是先替换再运算,多重调用也是先整体替换完成后再运算。

比如定义一个宏:

#define FUN(a,b){printf("%d,%d\n",a,b);printf("%d\n",a+b);}

#define F(a,b) a+b  

3. 常量的定义

const int a=10;   //在定义变量前加const 

常量不允许被修改,常量必须初始化

4. 文件包含

我们想用库函数就需要包含头文件,也就是文件包含,当然也可以编写自定义头文件,包含自己编写的头文件。

4.1. 文件包含的基本格式:

#include<文件名> 或者#include "文件名",如:

#include<stdio.h>   //包含系统头文件用<>,只会在系统头文件中找

#include "文件名"  //包含自定义头文件用"",在自定义头文件中找不到就会在系统头文件中去找

文件包含允许嵌套,即在一个被包含的文件中可以包含其他文件。

4.2. 头文件的重复包含

头文件的嵌套包含可能会引起头文件的重复包含,从而出现函数和变量重复定义的问题,所以需要避免头文件中重复包含,某些宏定义一句可以防止头文件重复包含,如:

#pragma once //防止头文件重复包含,不让文件的内容被包含两次,在头文件最前面添加

#pragma oce 是vs独有的,有使用平台的限制,其他平台可能不存在。

避免重复包含还有一种方法:

#ifndef __TOOL_H__        //如果没有定义,就执行下面的语句定义

#define __TOOL_H__    //定义

//在头文件中一般只声明函数,相当于一个功能。然后在同名的源文件中定义,实现功能

void fun(); 

#endif          //和ifndef对应,结束if这个代码块

5. 条件编译

条件编译就是根据不同的条件编译不同的代码段

#if....#else....#endif    //判断的是#if后面的条件真假

#ifdef....#else.....#endif                   //判断的是#ifdef后面的宏是否定义了

#ifndef....#else.....#endif                   //判断的是#ifndef后面的宏是否定义了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值