<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>define</title>
	<atom:link href="https://www.aitaocui.cn/tag/206954/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Thu, 24 Nov 2022 10:45:09 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>define</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>define(计算机专业用语)</title>
		<link>https://www.aitaocui.cn/article/318041.html</link>
					<comments>https://www.aitaocui.cn/article/318041.html#respond</comments>
		
		<dc:creator><![CDATA[友谊已走到尽头]]></dc:creator>
		<pubDate>Thu, 24 Nov 2022 10:45:09 +0000</pubDate>
				<category><![CDATA[百科]]></category>
		<category><![CDATA[define]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=318041</guid>

					<description><![CDATA[define，宏定义，C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为：#define 宏名 字符串；带参宏定义的一般形式为：#define 宏名（参数表...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>define，宏定义，C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为：#define 宏名 字符串；带参宏定义的一般形式为：#define 宏名（参数表） 字符串；/nPHP中define 函数定义一个常量。常量类似变量，不同之处在于：在设定以后，常量的值无法更改。常量名不需要开头的美元符号 ($)。作用域不影响对常量的访问 。常量值只能是字符串或数字。</p>
</article>
<article>
<h1>参数</h1>
<p>#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&amp;GPE::##basename</p>
<p>在#define中，标准只定义了#和##两种操作。#用来把参数转换成字符串，##则用来连接前后两个参数，把它们变成一个字符串。</p>
<p>输出为:token 9 = 10</p>
<p>详见百科typedef（相似）。</p>
<h1>作用</h1>
<p>被定义为“宏”的标识符称为“宏名”。在编译预处理时，对程序中所有出现的“宏名”，都用宏定义中的字符串去代换，这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令#define完成的，宏替换是由预处理程序完成的。宏（Macro）是预处理命令的一种，它允许用一个标识符来表示一个字符串。</p>
<p>宏定义的作用范围仅限于当前文件，即file1.c中定义 #define PI 3.14，在file2.c中该宏定义不起作用；通过将#define PI 3.14定义在common.h中，file1.c和file2.c分别#include &quot;common.h&quot;的方式，该宏定义在file1.c和file2.c中都起作用。</p>
<p>在C或C++语言中，“宏”分为有参数和无参数两种。</p>
<h1>宏定义优点</h1>
<p>(1) 方便程序的修改</p>
<p>使用简单宏定义可用宏代替一个在程序中经常使用的常量，这样在将该常量改变时，不用对整个程序进行修改，只修改宏定义的字符串即可，而且当常量比较长时， 我们可以用较短的有意义的标识符来写程序，这样更方便一些。</p>
<p>我们所说的常量改变不是在程序运行期间改变，而是在编程期间的修改，举一个大家比较熟悉的例 子，圆周率π是在数学上常用的一个值，有时我们会用3.14来表示，有时也会用3.1415926等，这要看计算所需要的精度，如果我们编制的一个程序中 要多次使用它，那么需要确定一个数值，在本次运行中不改变，但也许后来发现程序所表现的精度有变化，需要改变它的值， 这就需要修改程序中所有的相关数值，这会给我们带来一定的不便，但如果使用宏定义，使用一个标识符来代替，则在修改时只修改宏定义即可，还可以减少输入 3.1415926这样长的数值多次的情况，我们可以如此定义 #define pi 3.1415926，既减少了输入又便于修改，何乐而不为呢？</p>
<p>(2) 提高程序的运行效率</p>
<p>使用带参数的宏定义可完成函数调用的功能，又能减少系统开销，提高运行效率。正如C语言中所讲，函数的使用可以使程序更加模块化，便于组织，而且可重复利用，但在发生函数调用时，需要保留调用函数的现场，以便子函数执行结束后能返回继续执行，同样在子函数执行完后要恢复调用函数的现场，这都需要一定的时间，如果子函数执行的操作比较多，这种转换时间开销可以忽略。</p>
<p>但如果子函数完成的功能比较少，甚至于只完成一点操作，如一个乘法语句的操作，则这部分转换开销就相对较大了，但使用带参数的宏定义就不会出现这个问 题，因为它是在预处理阶段即进行了宏展开，在执行时不需要转换，即在当地执行。宏定义可完成简单的操作，但复杂的操作还是要由函数调用来完成，而且宏定义所占用的目标代码空间相对较大。所以在使用时要依据具体情况来决定是否使用宏定义。</p>
<h1>无参宏定义</h1>
<p>无参宏定义的一般形式为：#define 标识符 字符串</p>
<p>其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。</p>
<p>例如：#define M (a+b)它的作用是指定标识符M来代替表达式(a+b)。在编写源程序时，所有的(a+b)都可由M代替，而对源程序作编译时，将先由预处理程序进行宏代换，即用(a+b)表达式去置换所有的宏名M，然后再进行编译。</p>
<p>程序1：</p>
<p>上例程序中首先进行宏定义，定义M来替代表达式(a+b),在 s= M * M 中作了宏调用。在预处理时经宏展开后该语句变为： S=(a+b)*(a+b) 但要注意的是，在宏定义中表达式(a+b)两边的括号不能少。否则会发生错误。 如当作以下定义后：#define M (a)+(b) 在宏展开时将得到下述语句：S= (a)+(b)*(a)+(b)</p>
<p>对于宏定义还要说明以下几点：</p>
<p>1.宏定义是用宏名来表示一个字符串，在宏展开时又以该字符串取代宏名，这只是一种简单的代换，字符串中可以含任何字符，可以是常数，也可以是表达式，预处理程序对它不作任何检查。如有错误，只能在编译已被宏展开后的源程序时发现。</p>
<p>2.宏定义不是说明或语句，在行末不必加分号，如加上分号则连分号也一起置换。</p>
<p>3.宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。 （有关#undef 请查阅其他资料）</p>
<h1>带参宏定义</h1>
<p>c语言允许宏带有参数。在宏定义中的参数称为形式参数，在宏调用中的参数称为实际参数。对带参数的宏，在调用中，不仅要宏展开，而且要用实参去代换形参。</p>
<p>带参宏定义的一般形式为：#define 宏名(形参表) 字符串</p>
<p>在字符串中含有各个形参。带参宏调用的一般形式为： 宏名(形参表)</p>
<p>例如：</p>
<p>在宏调用时，用实参5去代替形参y，经预处理宏展开后的语句为: k=5*5+3*5</p>
<p>程序2：</p>
<p>上例程序的第一行进行带参宏定义，用宏名MAX表示条件表达式 (a&gt;b)?a:b ，形参a,b均出现在条件表达式中。程序中 max=MAX(x,y) 为宏调用，实参x,y，将代换形参a,b。宏展开后该语句为： max=(x&gt;y)?x:y; 用于计算x,y中的大数。</p>
<p>#define 条件编译</p>
<p>头文件(.h)可以被头文件或C文件包含；重复包含（重复定义）由于头文件包含可以嵌套，那么C文件就有可能包含多次同一个头文件，就可能出现重复定义的问题的。 通过条件编译开关来避免重复包含（重复定义）。</p>
<h1>PHP用法</h1>
<p>define() 函数定义一个常量。</p>
<p>常量类似变量，不同之处在于：</p>
<p>在设定以后，常量的值无法更改</p>
<p>常量名不需要开头的美元符号 ($)</p>
<p>作用域不影响对常量的访问</p>
<p>常量值只能是字符串或数字</p>
<h1>例子</h1>
<h2 id="a-dff5050d">例子1</h2>
<p>定义一个大小写敏感的常量：</p>
<p>输出：</p>
<p>Hello world!</p>
<h2 id="a-da7a7575">例子2</h2>
<p>定义一个大小写不敏感的常量：</p>
<p>输出：</p>
<p>Hello world!</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/318041.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
