iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++的define是什么
  • 223
分享到

C++的define是什么

2023-06-17 12:06:46 223人浏览 八月长安
摘要

这篇文章主要介绍“c++的define是什么”,在日常操作中,相信很多人在C++的define是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的define是什么”的疑惑有所帮助!接下来,请跟着小编

这篇文章主要介绍“c++的define是什么”,在日常操作中,相信很多人在C++的define是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的define是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

挑战#define

#define是C提供的一条很有用的指令,但在C++中,很有可能杜绝宏指令的使用。

1 .const宏指令允许用户指定某一标识符的值作为一个常量,

如:#define PI 3. 1415926

它也可以用来定义字符串:#define HZK16 "HZK16F"以下使用可以通过:

cout << "PI is“<<PI;  cout << "Filename: "<< HZK16;

但宏毕竟不是一个合法的对象,虽然它伪装得很***。C++为用户提供了常量修饰符const,可以指定某个对象的值为常量。它阻止用户对其进行赋值或其它副作用,

类似于上例:

const float PI=3.1415926;  char*const HZK16="HZK16F";  PI = 3. 14; //error  HZK16="HZK16K"; //error: Cannot modify a const object

但对于指针的处理似乎有些复杂,例如以下使用却又合法:

HZK16[5]=&rsquo;r&rsquo;; //ok HZK16 ="HZK16K"

清楚地了解const修饰的范围很有必要,如下是声明形式与相应含义:

char*const cpl="I love you!“; //const修饰&rsquo;*&rsquo;,cp1是一个指向字符的指针常量  const char*cp2="I hate you!“; //const修饰&rsquo;char' cp2是一个指向字符常量的指针  const char*const cp3="Get the hell out of here!“; // const分别修饰&rsquo;char&rsquo;和&rsquo;*&rsquo;,

cp3是一个指向字符常量的指针常量,因此,以下使用仍合法:

strcpy(cpl "Oh no...“);  cp2++;

因为cpl只管盯住某一处的地址不放,而阻止其中的内容不被改写则不是它的责任,cp2则恰恰相反,它不允许你修改其中的内容,却可以被你指来指去(这个下场可能更惨)。只有使用两个修饰符(如cp3)才可能是最保险的办法。

指向const的指针不能被赋给指向非const的指针:

float*p=&PI;  //error: Cannot convert 'const float*&rsquo; to 'float*&rsquo;  *p=3.14;

这条限制保证了常量的正当含义。但注意由显式转换所引起的常量间接修改是可能的:

//test08.cpp  #include <iOStream.h>  void main()  {  char * Spy;  const char * const String = "Yahoo!";  Spy = (char*)String;  Spy[5] = '?';  cout << String;  }  输出结果:Yahoo!

2.内联函数(in line function)

宏在某些场合能得到类似于函数的功能,如下是一个常见的例子:#define ADD (a b) ((a)+(b))

cout<<“1+2=”<它将实现数据求和功能而输出:但我们至少有一打理由拒绝使用它,以下是最明显的:

①宏缺少类型安全检测,如:

ADD ('A' 0. 0l);

这样的调用将被解释为合法,而事实上,很少的用户期望能写出这样的语句;

②宏不会为参数引入临时拷贝,如:

#define DOUBLE (x)((x)+(x))  int i(1);  cout<<DOUBLE(i++); //prints '3'

③宏不具有地址,例如可能在一个计算器程序中有:

case ' +': Operator = & ADD;

并不能得到合理解释。

采取函数?然而,使用函数并不是最划算的支出,它浪费了宝贵的执行时间。使用过汇编语言的读者可能知道,一般函数执行真正的函数体前后,要做一些现场保护工作,当函数体积很小时,这种冗余的工作量将会远远大于函数本身。

为此,C++提供了关键字inline,当用户希望编译器将某函数的代码直接插入到调用点时,可将其设置成inline函数,即在函数定义时加上关键字inline,如:

//test09.cpp  #include <iostream.h>  inline int Add (int a int b)  {  return a + b;  }  void main O)  {  cout<<"1+2=“<<Add(1 2);  }

主函数将被编译器解释为:

count<<"1+2=“<<{1+2 };

其行为完全类似于前例的ADD (a b)宏。经验表明,将使用频繁而且体积很小的函数声明为inline是明智的。

3.函数重载(overload)

在实际数据求和操作时,如上节内容中提供的Add()函数是远远不够的,你不得不再添加一些其它代码,如:

double ADDDouble(double a double b)  {  return a + b;  }  float AddFloat (float a float b )  {  return a + b;  }

特别地,在C++中你可以玩弄名字的技巧,将以上的AddDouble AddFloat皆取名为Add,如:

double Add(double a double b)  {  return a + b;  }

尽管放心,编译器会安全地为不同的调用形式找到相应的函数原型。如:

double a b;  Add(f 2); //int Add(int int)  Add (a b); //double Add (doubledouble)

这样,不同的函数拥有相同的函数名,即函数重载。函数重载以及后面的模板、虚函数机制形成了“一个接口,多种功能”的特性,即多态性(polymorphism),它是面向对象(OO)的技术之一。

在使用重载机制时,C++提出了许多防止二义性的限制,如:

void fun(int a);  int fun(int a);  void fun(int& a);  void fun (int a int b=0);

很可能引起C ++编译器的恐慌,它在遇到诸如fun(100)的调用时会十分不满。用户有义务保证任一调用形式不产生二义性。以下是一种常见的使用重载机制的例程:

//test10.cpp  #include <graphics.h>  #include <iostream.h>  void Pixel(int x int y int color)  {  putpixel(x y color);  }  int Pixel(int x int y)  {  return getpixel(x y);  }  void main()  {  int Driver=VGA Mode=VGAHI;  initgraph(&Driver &Mode "");  Pixel(100 100 4);  int Color = Pixel(100 100);  closegraph();  cout << "Color of point(100 100):" << Color;  }

可以想象C++将以上不同的Pixel()函数分别编码为Pixel_iii和Pixel_ii,它的形式包含了各入口参数的数据类型。注意,编码未包含返回值的信息,因而依赖于返回值类型的差异的函数重载是不稳定的。因此,连接器(linker)可以毫不费力地找到相应的模块。但这对于新旧C版本产生的模块连接恐怕添加了麻烦,因为传统的C函数库中并没有对函数名再作手脚的坏习惯,C++不得不提供关键字extern来保证这种连接的安全性,如下形式(注意&lsquo;C&rsquo;可要大写):

extern "C" {  void Pixel(int x int y int Color);  };

将告诉编译器只需要在函数库中找相应的Pixel模块,而不必自作聪明。而

extern "C" { //' #include&rsquo;一定要另起一行  #include "function. h"  };

则声明包含在头文件function. h中所有函数模块皆采取C连接。

到此,关于“C++的define是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C++的define是什么

本文链接: https://www.lsjlt.com/news/289033.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++的define是什么
    这篇文章主要介绍“C++的define是什么”,在日常操作中,相信很多人在C++的define是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的define是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • c语言中typedef和define的区别是什么
    这篇文章主要介绍“c语言中typedef和define的区别是什么”,在日常操作中,相信很多人在c语言中typedef和define的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中typed...
    99+
    2023-06-25
  • C语言中const和define的区别是什么
    本文小编为大家详细介绍“C语言中const和define的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中const和define的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。def...
    99+
    2023-06-29
  • C/C++中的#define怎么使用
    这篇文章主要介绍“C/C++中的#define怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C/C++中的#define怎么使用”文章能帮助大家解决问题。1.数值类型输出易读的字符串形式例如...
    99+
    2023-07-05
  • php中define是什么
    在PHP中,define是一个用于定义常量的函数。常量是在脚本执行过程中无法改变其值的标识符。define函数接受两个参数:常量的名...
    99+
    2023-08-28
    PHP
  • C++/C中#define怎么使用
    本篇内容介绍了“C++/C中#define怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 缩减代码 第一种用法与type...
    99+
    2023-07-02
  • C语言的#define怎么用
    这篇文章主要介绍“C语言的#define怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言的#define怎么用”文章能帮助大家解决问题。typedef vs #define#define&...
    99+
    2023-06-16
  • php中define的用法是什么
    在PHP中,define函数用于定义常量。常量是一个简单值的标识符,该值在脚本中是不变的,不能被重新赋值。define函数的语法如下...
    99+
    2023-09-16
    php
  • C/C++中#define的妙用分享
    目录1.数值类型输出易读的字符串形式2.易记的简化调用1.数值类型输出易读的字符串形式例如使用enum定义一些错误值,想要将数值类型的错误,输出易读的字符串形式重要的一句代码#define MAKE_PAIR(val) ...
    99+
    2023-02-23
    C define使用 define
  • php中的define中是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑define是PHP中的一个内置函数,用于定义一个常量。所谓常量就是不能改变的量,PHP 中常量一旦被定义,就不能被修改或取消定义。合法的常量名只能以字母和下划线开始,...
    99+
    2020-06-23
    php define
  • C#的define预处理器怎么用
    今天小编给大家分享一下C#的define预处理器怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。#define 预处理器...
    99+
    2023-06-17
  • php中define()函数的作用是什么
    在PHP中,define()函数用于定义一个常量。常量是一个固定不变的值,在脚本执行期间不能被修改。常量的命名约定是全大写字母,常量...
    99+
    2023-10-12
    php
  • C语言中#define在多行宏定义出错的原因是什么
    这篇文章主要介绍了C语言中#define在多行宏定义出错的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中#define在多行宏定义出错的原因是什么文章都会有所收获,下面我们一起来看看吧。C语言...
    99+
    2023-07-05
  • C语言宏定义#define的使用
    目录无参宏定义定义形式 带参宏定义定义形式#和##运算 #运算 用法:##运算 用法:变参宏#ifndef 条件编译    ...
    99+
    2022-11-12
  • 详解C++中typedef 和 #define 的区别
    1、执行上不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能。 #define 则是宏定义,发生在预处理阶段,也就是编译之前,它只...
    99+
    2022-11-12
  • C语言#define定义宏的使用详解
    目录1.宏是什么2.宏的用法3. 宏的注意事项4. 宏和函数的区别5.命名要求6. 条件编译常见条件编译指令及应用场景1.宏是什么 #define 机制包括了一个规定,允许把参数替换...
    99+
    2022-11-13
    C语言#define定义宏 C语言 #define
  • 浅谈C++/C关于#define的那些奇奇怪怪的用法
    目录前言1 缩减代码 2 定义变量3 代替函数 4 函数做不到的功能5 一些有些"邪门"的用法 6 与#define有关联的带&ld...
    99+
    2022-11-13
  • C语言入门篇--定义宏#define的概述
    目录1.什么是宏2.为什么要有宏?3.宏的用法3.1定义宏3.2宏常量3.3“宏函数”1.什么是宏 宏只做简单的文本替换,但一般在作为变量名出现或者在字符串中出现中是不会被替...
    99+
    2022-11-12
  • C语言中const和define的区别你了解嘛
    目录define和const使用const和define区别总结define和const使用 const和define区别 #include <stdio.h> #...
    99+
    2022-11-13
  • C语言中typedef的用法以及#define区别详解
    目录1、简洁定义 2、为已有类型起别名 为字符数组起别名为指针起别名3、typedef 和 #define 的区别总结1、简洁定义 C语言允许为一个数据类型起一个新的别名,就像给人...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作