利用预编译指令防止代码重复编译

 看下面一段代码    

#include "test.h"   //看到这句我们重复了 三次 按照我们以往的编写 我们可能认为 他会出现变量函数 等重复定义的错误  

在一个文件中这样写显然是不好  我这里是做演示 因为我们在大型项目开发中很有可能的重复包含 同一个头文件 为了防止错误的发生我们要再

头文件中利用#idndef  #ifdef 等预编译指令 来处理代码

 

#ifdef identifier

#ifndef identifier  

identifier标示符 可以使变量的名字也可以是 宏的名字 等等    具体看MSDN 介绍

 

 

 

 

主程序代码:

#include <iostream>
//#define  test 1 //如果想避免某个变量被重复使用就这样

#include "test.h"
#include "test.h"
#include "test.h"              
#define final 33
#define DEBUG 33

using namespace std ;

void main()
{
#if DEBUG
 cout<<"debug"<<endl ;
#endif
#ifdef final
 cout<<"Has  Defined"<<endl;
#endif
 
}

 

test.h的代码   只需要如下几句代码就可以完成 防止代码重复编译的问题   其实我们注意到 在头文件中我们经常定义了一个 宏来处理这类问题

这个DEFINE 就是我定义的宏  如果 这个头文件已经被包含一次了 那么这个宏 标示符就会被定义       当下次重复包含头文件的时候  就不满足了 预编译指令

那么就避免了重复定义的情况  因而 不会发生变异错误

#define  DEFINE

#ifndef   DEFINE 

int  i ;

.......code 。。。。

#endif 

 

 

 

时间: 2024-10-23 20:17:23

利用预编译指令防止代码重复编译的相关文章

C++ 内置宏定义 与 预编译指令

内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE____TIME__ __FUNCTION__ 2.预编译指令 可以防止头文件被多次引用 可以方便解决代码跨平台编译问题 可以根据自定义变量灵活执行程序 等等,许多好处   效果可以看代码实例: test.h 1 #ifndef __TEST_H 2 #define __TEST_H 3 4 #in

IOS代码运行的磨刀石-预编译指令

IOS中代码运行的磨刀石--预编译指令 所谓预编译,就是程序代码在编译之前,开发工具为我们预先做的一些工作.不要小瞧这些指令,没有它们,我们的代码可能寸步难行. 一.文件包含相关预处理命令 #include <header> #include "header" C语言中使用的包含文件的指令""和<>的区别为,""是从当前目录开始寻找文件,<>是从系统库中寻找文件.这两个指令不能使头文件循环引入,也不能重复包含同

#ifdef预编译指令详解

  这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译".有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句.     条件编译命令最常见的形式为:     #ifdef 标识符     程序段1     #else     程序段2     #endif           它的作用是:当标识符已经被定义过(一般是用#define命令定

Delphi中预编译指令的使用方法

在Delphi中,也有与C相似的预编译指令,虽然该类指令只在当前的单个文件有效(也有可能是笔者未全面了解该类指令的真正用法),但是这一类指令对于进行多版本的制作工作(如从标准版中出学习版),确实有着相当不错的用途. 一.指令介绍: 1.DEFINE指令: 格式:{$DEFINE 名称} 说明 :用于定义一个在当前单元有效的符号(Symbol).定义了 之后可以使用IF DEF和IFNDEF指令来判断该符号是否存在. 2.UNDEF指令:格式:{$UNDEF 名称}说明:用于取消一个在当前单元已经

C#必备知识之预编译指令

预编译又称为预处理,是做些代码文本的替换工作.处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令. 下面对C#中的预编译指令进行介绍: 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值,可以将它看为一个符号而已.#undef就是删除这个符号的定义.如果符

Delphi 中的预编译指令

  Delphi 中的预编译指令 在Delphi中,也有与C相似的预编译指令,虽然该类指令只在当前的单个文件有效(也有可能是笔者未全面了解该类指令的真正用法),但是这一类指令对于进行多版本的制作工作(如从标准版中出学习版),确实有着相当不错的用途.  一.指令介绍:  1.DEFINE指令:  格式:{$DEFINE 名称}  说明 :用于定义一个在当前单元有效的符号(Symbol).定义了之后可以使用IF DEF和IFNDEF指令来判断该符号是否存在.  2.UNDEF指令:  格式:{$UN

《嵌入式C编程:PIC单片机和C编程技术与应用》一第3章预编译指令3.1 标准预编译指令

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第3章,第3.1节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 第3章 Embedded C Programming: Techniques and Applications of C and PIC MCUS 预编译指令 编译器对C程序的处理可以明确地分为两步.第一步由预编译器完成.以#开头的预编译指令可能会影响编译器设置或者进行

Delphi7.0 预编译指令说明

  Delphi7.0 预编译指令说明 A.1 使用编译设置对话框  编译器的编译指令是用于指定编译器对项目编译过程的动作和行为.可以通过[Project]->[Options]-> [Complier]选项页进行设置(快捷键:Crtl+Shift+F11),绝大部分的编译环境都可以通过这一对话框进行调 整,他包含了对代码.语法.调试信息等的设置.  1.代码设置(Code Generation) Optimization: 是否优化代码.包括防止变量到CPU寄存器.合并分解表达式.生成中间变

《嵌入式C编程:PIC单片机和C编程技术与应用》一1.4 C预编译指令

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.4节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 1.4 C预编译指令 预编译是C语言中一个非常有意思的特性.预处理使用工具(预处理器)在编译前先扫描一遍代码,并对代码做出相应的修改从而生成用来编译的代码.预编译指令由#开始,占用一整行.在第3章中将会详细介绍它.在上面的例子中,#include指令将文件(e3.h)的