预处理器变量

预处理器变量,在有的书中又叫预处理器常量,都是一个意思

  • 为了避免名字冲突,习惯上处理器变量的所有字母一律大写
  • 预处理器变量在整个程序中是唯一的
  • 预处理器变量只有两种状态,已定义或未定义,用于避免头文件的多重包含而引起的重复定义

假设定义一个预处理器常量SALESITEM_H,可以用如下方式来预防多次包含同一头文件:

     #ifndef SALESITEM_H
     #define SALESITEM_H
     // Definition of Sales_itemclass and related functions goes here
     //....
     //..
     #endif

条件指示

    #ifndef SALESITEM_H

测试 SALESITEM_H 预处理器变量是否未定义。如果 SALESITEM_H 未定义,那么#ifndef 测试成功,跟在#ifndef 后面的所有行都被执行,直到发现#endif。相反,如果SALESITEM_H 已定义,那么#ifndef 指示测试为假,该指示和#endif 指示间的代码都被忽略。

举个例子:

定义一个头文件

test_A.h

test_B.h

程序源文件为

main.c

如果头文件test_A.h中包含test_B.h,而在源文件中又包含头文件test_A.h和 test_B.h,这时你就会发现在源文件中test_B.h被包含了两次,一次是直接包含,一次是包含test_A.h时间接包含的,如果
test_B.h中有类的定义,这时就会发生重定义这样低级的错误。有些同学就有疑问了,你明明知道了test_B.h已经在test_A.h中包含过了为什么还要在源文件中再次包含test_B.h呢?这不是多此一举吗?我想告诉你的是当你的程序比较庞大时,你就不会这样想了,头文件多的让你头皮发麻,你压根就看不出来他们之间的包含关系。

顺便在说说  #include<test.h>和#include"test.h"的区别

#include<test.h>包含的头文件是标准库头文件,编译器会在设定好的路径搜索test.h头文件,系统头文件可能以文件方式保存,也可能以系统特有的其他格式保存。

#include"test.h"包含的头文件是自定义的头文件,编译器在包含该头文件的源文件所在的位置开始搜索,用户定义的头文件以文件方式保存。

时间: 2024-08-29 01:28:55

预处理器变量的相关文章

【C/C++】C预处理器

C预处理器处理程序的源代码,在编译器之前运行,通常以"#"开头. C语言的预处理主要有三个言而的内容: 1) 宏定义和宏替换: 2) 文件包含: 3) 条件编译. 1. 宏定义和宏替换 "宏"是借用汇编语言中的概念,为的是在C语言程序中方便的作一些定义和扩展.这些语句以#define开头,分为两种:符号常量的宏定义和带参数的宏定义. 1) 符号常量的宏定义和宏替换 1 #define 标识符 字符串 其中标识符就称为宏名称,注意宏定义末尾不加分号. 由于预处理是在编

Atitit.预定义变量与变量预处理器

1. 预定义变量与1 2. 变量预处理器1 3. 测试数据生成器3 1. 预定义变量与 姓名:$name 次数:$rdm 时间:$datetime 文件名:$filename 类型:类型2 分类:类型1 课时:$rdm 点位:$rdm 是否:$tf 电话:$tel 数量:$rdm 成功率:$pct 日期:$date 卡号:$cardno 开户行:$bank 开户人:$name 金额:$money 年龄 :$age 性别:$sex 地区:$area 状态:$stat 作者::  ★(attilax

关于前端CSS预处理器Sass的小知识!

前面的话 ??"CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工具,提 供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护.本文将详细介绍sass的使用 定义 ??Sass是一门高于CSS的元语言,它能用来清晰地.结构化地描述文件样式,有着比普通CSS更加强大的功能.Sass能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样式

预处理器

本文是对C++预处理器的学习整理,参考了网站www.learncpp.com相关章节的内容. 一.概述 代码在编译之前需要通过预处理器进行预处理,预处理器运行时,逐行扫描代码寻找预处理指令.预处理指令是以#开头.换行符结尾(不是分号:)的代码. 预处理器主要实现一下三个功能: 1. include 2. macro define 宏定义. 3. 条件编译 二.include 故名思意,#include用于包含头文件,预处理器在遇到#include 指令时,将相应头文件的内容复制到指令所在的位置.

一些C#预处理器指令

像C语言一样,C#有一些预处理器指令的命令.例如,#if#end if,#define等,所谓这些命令是指不会转化为可执行代码中的一些命令,只是在编译的过程中起作用.下面简要介绍一下:1 .#define和 #undef#define的用法如下所示:#define DEBUG 它告诉编译器存在给定名称的符号,在本例中是DEBUG.这有点类似于声明一个变量,但这个变量并没有真正的值,只是存在而已.这个符号不是实际代码的一部分,而只在编译器编译代码时存在.在C#代码中它没有任何意义.#undef正好

PHP (超文本预处理器)

1.PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Java.Perl以及PHP自创的语法.它可以比CGI或者Perl更快速地执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI

CSS预处理器Sass(Scss)、Less、Stylus

CSS 预处理编译器能让我成程序化其的方式编写CSS代码,可以引入CSS中没有的变量.条件.函数等特性,从而让代码更简单易维护,但一般按预处理器语法编写的代码无法直接在浏览器中运行,需用通过工具比如gulp转换成标准的CSS语法,从而在浏览器中运行.个人理解它是标准CSS语法的扩展及增强,能在一定程度上提高编码效率. 三种预处理器的对比: Sass诞生是最早也是最成熟的CSS预处理器,有Ruby社区和Compass支持:安装.编译依赖Ruby环境: Stylus早期服务器Node JS项目,在该

CSS的几款流行预处理器

预处理器是一种程序,需要将一种程序的数据转换成另一种程序的数据.它可以帮助我们编写可维护的.与时俱进的代码,也可以减少需要编写的CSS数量,这些工具对于哪些需要大量样式表和样式规则的大型用户界面是非常有帮助的. SASS 首先是SASS,拥有多年开元历史项目.可以说他定义了现代CSS预处理器也不为过. 它的比较实用的语法有: 变量 sass的变量必须是$开头,后面紧跟变量名,而变量值和变量名之间就需要使用冒号(:)分隔开(就像CSS属性设置一样),如果值后面加上!default则表示默认值. 普

C#预处理器指令

C#有许多名为预处理器指令的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面. 例如,使用预处理器指令可以禁止编译器编译代码的某工部分.如果计划发布两个版本的代码,即基本版本和拥有更多功能的企业版本, 就可以使用这些预处理器指令.在编译软件的基本版本时,使用预处理器指令可以禁止编译器编译 与额外功能相关的代码.另外,在编写提供调试信息的代码时,也可以使用预处理器指令. #define和#undef #define的用法如下所示: #define DEBUG它告诉编译器存