#define指令

示例:

#define  PI  3.1415926

该指令(现在的C++版本用const代替#define) 指示预处理程序将PI的每一次出现用3.1415926来替换。

当预处理程序处理代码:

{double x=PI, y=1, z;

时,它会将下一行传送给编译程序:

{double x=3.1415926, y=1, z;

请注意预处理程序会删除注释,使得编译程序不会处理到注释

可以用#define指令来定义宏,也就是插入到源代码中的一系列计算,而不像上述例子那样的单一符号。从逻辑上来说,宏与函数在代码中的使用方式相同,都是一个单一的名字来代表一组操作。宏的运行速度比函数要快(但是占内容,因为它把代码指令在函数中重新展开了),在C中普遍使用。在C++中使用的是内联函数而不是宏。因此,尽管在几年前,程序员必须知道如何正确地编写宏,但是现在并不打算详细地介绍宏。宏容易导致错误。

 

其他重要的预处理程序指令控制条件计算。#ifdef指令只要该指令中所用的符号已经定义。它就可以将其后的代码包含其中。例如

#ifdef CPLUSPLUS

    //如果定义了CPLUSPLUS则这里的一系列指令都会执行

#endif

注意:这里的CPLUSPLUS可以没有值

例如

#define CPLUSCPLUS和

#define CPLUSCPLUS 2

这两条语句对于#ifdef都为真,条件中的一系列指令都会执行。

同样请注意符号的名字要用大写。尽管这一点不是必需的,但这是程序设计中通常的习惯。另外一种普遍的用法是使用小写,但开头的两个字符必须是下划线。

 

下面的头文件

//point.h

#ifndef _POINT

#define _POINT

struct Point

{int x, y;};

#endif

//point.h文件结束

因为point.h中定义的结构体会被多个*.c文件包含。例如a.c, b.c 。当预处理程序在处理a.c时,它会找到point.h发现还没有定义_POINT.那么定义结构体。然后当预处理程序在处理b.c时,发现定义了_POINT则它不会面重复定义Point结构体。如果重复定义是会报错的,所以这里的预处理指令是必须的.

 

posted @   letmedown  阅读(442)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示