C/C++预处理指令#define,条件编译#ifdefine

Posted 工控上位机学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++预处理指令#define,条件编译#ifdefine相关的知识,希望对你有一定的参考价值。

工控课堂

工控课堂【www.gkket.com】工程师必备网站

电气工控自动化-超万元免费资料

C/C++预处理指令#define,条件编译#ifdefine

本文主要记录了C/C++预处理指令,常见的预处理指令如下:

#空指令,无任何效果

#include包含一个源代码文件

#define定义宏

#undef取消已定义的宏

#if如果给定条件为真,则编译下面代码

#ifdef如果宏已经定义,则编译下面代码

#ifndef如果宏没有定义,则编译下面代码

#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

#endif结束一个#if……#else条件编译块

#error停止编译并显示错误信息

条件编译命令最常见的形式为:

#ifdef 标识符

程序段1

#else

程序段2

#endif

例:

#ifndef bool
#define ture 1
#define false 0
#endif

在早期vc中bool变量用1,0表示,即可以这么定义,保证程序的兼容性

在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。

//main.cpp文件
#include "cput.h"
#include "put.h"
int main()
{
cput();
put();
cout << "Hello World!" << endl;
return 0;
}
//cput.h 头文件
#include <iostream>
using namespace std;
int cput()
{
cout << "Hello World!" << endl;
return 0;
}
//put.h头文件
#include "cput.h"
int put()
{
cput();
return 0;
}

编译出错;在main.cpp中两次包含了cput.h

尝试模拟还原编译过程;

当编译器编译main.cpp时

//预编译先将头文件展开加载到main.cpp文件中
//展开#include "cput.h"内容
#include <iostream>
using namespace std;
int cput()
{
cout << "Hello World!" << endl;
return 0;
}
//展开#include "put.h"内容
//put.h包含了cput.h先展开
#include <iostream>
using namespace std;
int cput()
{
cout << "Hello World!" << endl;
return 0;
}
int put()
{
cput();
return 0;
}
int main()
{
cput();
put();
cout << "Hello World!" << endl;
return 0;
}

很明显合并展开后的代码,定义了两次cput()函数;

如果将cput.h改成下面形式:

#ifndef _CPUT_H_
#define _CPUT_H_
#include <iostream>
using namespace std;
int cput()
{
cout << "Hello World!" << endl;
return 0;
}
#endif

当编译器编译main.cpp时合并后的main.cpp文件将会是这样的:

#ifndef _CPUT_H_
#define _CPUT_H_
#include <iostream>
using namespace std;
int cput()
{
cout << "Hello World!" << endl;
return 0;
}
#endif
#ifndef _CPUT_H_
#define _CPUT_H_
#include <iostream>
using namespace std;
int cput()
{
cout << "Hello World!" << endl;
return 0;
}
#endif
int put()
{
cput();
return 0;
}
int main()
{
cput();
put();
cout << "Hello World!" << endl;
return 0;
}

这次编译通过运行成功;因为在展开put.h中包含的cput.h,会不生效,前面已经定义了宏_CPUT_H_

转发是最大的鼓励!谢谢您的支持!

重要通知

想加入工控上位机学习技术交流群

请添加班长为好友

并备注:地区-行业-姓名昵称获取进群资格。

C/C++预处理指令#define,条件编译#ifdefine

工控上位机学习
专业专注分享

      

——————————————————————

 来源:网络-百度文库,侵删!

▣ 声明:本文素材系网络收集,工控上位机学习编辑整理。文中所用视频、图片、文字版权归原作者所有。但因转载众多,无法确认真正原始作者,故仅标明转载来源。如涉及作品版权问题,烦请及时联系17621634088(微信同号),我们将即刻确认版权并按国家相关规定支付稿酬!


C/C++预处理指令#define,条件编译#ifdefine

她们都关注了,你还等什么?

C/C++预处理指令#define,条件编译#ifdefine C/C++预处理指令#define,条件编译#ifdefine C/C++预处理指令#define,条件编译#ifdefine C/C++预处理指令#define,条件编译#ifdefine C/C++预处理指令#define,条件编译#ifdefine C/C++预处理指令#define,条件编译#ifdefine C/C++预处理指令#define,条件编译#ifdefine

 猛戳阅读原文,开启电气工控自动化之路

以上是关于C/C++预处理指令#define,条件编译#ifdefine的主要内容,如果未能解决你的问题,请参考以下文章

C#-#define条件编译

C/C++ - 从代码到可执行程序的过程

条件编译#ifdef的妙用详解

预处理指令

程序执行过程(转载)

C语言 预处理详解(#include#define#if,特殊预定宏)