C语言第十一讲,预处理命令.

            C语言第十一讲,预处理命令.

一丶预处理简介

什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件

这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理、提前处理)。

预处理主要是处理以#开头的命令,例如#include <stdio.h>等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。

二丶预处理命令

1.#include<> or #include""

#include命令是包含命令.<> 代表包含的是系统头文件. " " 表示包含的是自己定义的头文件

包含的意思就是 复制粘贴一份.但是我们可以放到一个文件中去保存.不影响代码可读性.

例如:

我们有一个A.h文件.其内容为下.

struct A 
{
   int a;
   int b;
   int c;  
}

我们有一个.c文件.

#include"A.h"

int main()
{
   struct A a;
   a.a = 1;  
}

可以看出我们直接包含了结构体struct A,我们就可以直接定义结构体变量进行使用了.

其本质则是.

struct A
{
   int a;
   int b;
   int c;
}

int main()
{
  struct A a;
  a.a = 1;
}

三丶C语言的宏定义命令

#define语句的使用

#define语句就是替换的意思.在编译之前.我们将某个值定义为某个值.

#include <stdio.h>

#define NUMBER 100

int main()
{
    int sum = 1000 + NUMBER;
    printf("%d\n", sum);
    return 0;
}

使用完#define命令之后, NUMBER代表的就是100.

四丶C语言的带参宏

在C语言中,C宏可以是有参数的.

定义语句如下:

#define 宏名(形参列表) 字符串

例如:

#define MAX(A,b)  (((A) > (b))?((A): (b)));

int main()
{
   int a = MAX(3,4);
   printf("%d",a);
}
输出结果:
    4

我们只需要宏展开即可, A代表3,b代表4.

五丶条件宏的定义

指令         用途
    #           空指令,无任何效果
    #include    包含一个源代码文件
    #define     定义宏
    #undef      取消已定义的宏
    #if         如果给定条件为真,则编译下面代码
    #ifdef      如果宏已经定义,则编译下面代码
    #ifndef     如果宏没有定义,则编译下面代码
    #elif       如果前面的#if给定条件不为真,当前条件为真,则编译下面代码,其实就是else if的简写
    #endif      结束一个#if……#else条件编译块
    #error      停止编译并显示错误信息 

条件宏就是有条件的.比如 ifdef 

#define DBG
#ifdef DBG   如果定义了宏DBG
    #include<xxx.h>
#undef DBG  取消定义DBG宏.则下方在使用ifdef判断是否定义的DBG宏则会是没有定义.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏友弟技术工作室

bash脚本编程

1903
来自专栏黑泽君的专栏

动态代理详解

动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。     动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一...

872
来自专栏IMWeb前端团队

Nodejs进阶:服务端字符编解码&乱码处理

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道。编解码一旦...

36610
来自专栏Small Code

Python中strptime的简单使用

strptime是python datetime库中的函数,用于将一个日期字符串转成datetime日期格式便于后期处理,使用格式为datetime.strpt...

2348
来自专栏LinkedBear的个人空间

唠唠SE的多线程-02——线程锁 原

        可以使用this关键字作为锁对象,也可以使用所在类的字节码文件对应的Class对象作为锁对象

832
来自专栏程序员互动联盟

【答疑释惑】java中的全局变量

首先,java中是没有全局变量这个概念的,java程序中不能像C++那样在类外定义全局变量,因为JAVA当初出现的初衷就是为了安全性和跨平台性,所以去掉了类似C...

40811
来自专栏Python中文社区

Python3.7 contextvars 初探

Python 3.7 于2018年6月27日发布,本篇文章将对其中新增模块contextvars 做初步介绍,为读者勾勒一个大概轮廓。

1765
来自专栏Laoqi's Linux运维专列

nginx的location优先级

3247
来自专栏Java学习网

JavaScript依赖注入的实现思路

JavaScript依赖注入的实现思路 如今各个框架都在模块化,连前端的javascript也不例外。每个模块负责一定的功能,模块与模块之间又有相互依赖,那么问...

2156
来自专栏C/C++基础

C++中关于main函数的几点说明

main函数是C++程序的入口函数,C++标准要求main()函数的返回值类型为int。

812

扫码关注云+社区

领取腾讯云代金券