问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

在C语言中,预处理指令有什么作用?比如#define 宏名 字符串

发布网友 发布时间:2022-04-03 11:09

我来回答

6个回答

热心网友 时间:2022-04-03 12:38

C语言预处理程序的作用是根据源代码中的预处理指令修改你的源代码。预处理指令是一种命令语句(如#define),它指示预处理程序如何修改源代码。在对程序进行通常的编译处理之前,编译程序会自动运行预处理程序,对程序进行编译预处理,这部分工作对程序员来说是不可见的。
预处理程序读入所有包含的文件以及待编译的源代码,然后生成源代码的预处理版本。在预处理版本中,宏和常量标识符已全部被相应的代码和值替换掉了。如果源代码中包含条件预处理指令(如#if),那么预处理程序将先判断条件,再相应地修改源代码。
下面的例子中使用了多种预处理指令:
# include <stdio. h>
# define TRUE 1
# define FALSE (!TRUE)
# define GREATER (a, b) ((a) > (b) ? (TRUE) : (FALSE))
# define PIG-LATIN FALSE
void main (void);
void main (void)
{
int x, y;
# if PIG_LATIN
printf("Easeplay enternay ethay aluevay orfay xnay:") ;
scanf("%d", &x) ;
printf("Easeplay enternay ethay aluevay orfay ynay:");
scanf("%d", &y);
#else
printf(" Please enter the value for x: ");
scanf("%d", &x);
printf("Please enter the value for y: ");
scanf("%d", &y);
# endif
if (GREATER(x, y) = = TRUE)
{
# if PIG- LATIN
printf("xnay islay eatergray anthay ynay!\n");
#else
printf {" x is greater than y! \n" ) ;
# endif
}
else
{
# if PIG_LATIN
printf ("xnay islay otnay eatergray anthay ynay!\n");
#else
printf ("x is not greater than y!\n");
# endif
}
}
上例通过预处理指令定义了3个标识符常量(即TRUE,FALSE和PIG_LATIN)和一个宏(即GREATER(a,b)),并使用了一组条件编译指令。当预处理程序处理上例中的源代码时,它首先读入stdio.h头文件,并解释其中的预处理指令,然后把所有标识符常量和宏用相应的值和代码替换掉,最后判断PIG_LATIN是否为TRUE,并由此决定是使用拉丁文还是使用英文。
如果PIG_LATIN为FALSE,则上例的预处理版本将如下所示:
/ * Here is where all the include files
would be expanded. * /
void main (void)
{
int x, y;
printf("Please enter the value for X: ");
scanf("%d", &x);
printf("Please enter the value for y: ");
scanf("%d", &y),
if (((x) > (y) ? (1) : (!1)) == 1)
{
printf("x is greater than y!\n");
}
else
{
printf{"x is not greater than y!\n");
}
}
多数编译程序都提供了一个命令行选项,或者有一个独立的预处理程序,可以让你只启动预处理程序并将源代码的预处理版本保存到一个文件中。你可以用这种方法查看源代码的预处理版本,这对调试与宏或其它预处理指令有关的错误是比较有用的。
中国物联网校企联盟技术部

热心网友 时间:2022-04-03 13:56

预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替 换,最常见的预处理有:文件包含,条件编译、布局控制和宏替换4种

文件包含:#include 是一种最为常见的预处理,主要是做为文件的引用组合 源程序正文。

条件编译:#if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理, 主要是进行编译时
进行有选择的挑选, 注释掉一些指定的代码, 以达到版本控制、 防止对文件重复包含的功能。

布局控制:
#progma,这也是我们应用预处理的一个重要方面,主要功能是 为编译程序提供非常规的控制流信息。 宏替换:

#define,这是最常见的用法,它可以定义符号常量、函数功能、 重新命名、字符串的拼接等各种功能

热心网友 时间:2022-04-03 15:31

种类很多,不同的运行环境,通常还会增加很多新的预处理命令,预处理命令是用来控制编译器的。。。可以告诉编译器,所使用的文件路径(#include),条件编译(在什么条件下编译,什么条件下不编译,if,ifdef,,endif) ,宏设置(define,用途是第1段字符串代替第2段字符串,比如#define NC int,编译器看到单独的NC,就会认为他是int,所以你可以 NC a,定义一个整型变量)。。。。
最为复杂的就是 pragma 很多不同运行环境的C程序都会添加一些自己添加的特殊的预处理控制命令,当然也都支持C语言固有的。。。他们前面都会有pragma 比如很多时候我希望使用汇编程序,写一段代码,那就可以 用 #pragma asm 来告诉编译器,在一些代码,经常还要控制数据存放的位置,同样需要#pragma 存储器名 :地址等。。。。
不管怎样,与处理命令都是用来控制编译器的,本身不是程序代码,就像我要求一个工人做一个东西,但有时我会提出特殊要求,要求使用特定工具或者特殊要求(pragma),或者告诉他某个材料的位置等等(#include),还有可能用一些暗语(宏),不过这些本身却不是程序代码,只是一种编译前的约定或必要的交代。。。。

热心网友 时间:2022-04-03 17:22

预处理就是进行一个等价替换。如#include 文件名 ,就是编译时把相应文件替换包含进来;
#define则定义一个宏,代码中可能多次用到该常量,这样define后就会进行替换,方便常量值的修改

热心网友 时间:2022-04-03 19:30

#define 宏名 字符串
当你在下面的程序中碰到你定义的宏名时,就自动的替换为你定义的字符串
such as :#define H(x) x*x+x
在程序中的H(x)就被替换为x*x+x,重点是,原样替换,就是你定义的是什么就按照那个形式原样替换而不能任意加括号
for example :当碰到H(2+2)应替换为:2+2*2+2+2+2=12,而不是(2+2)*(2+2)+(2+2)=20

热心网友 时间:2022-04-03 21:55

举个例子
#define Pi 3.14
就是在编译程序的时候把所有的Pi换成3.14,在需要用到3.14的时候可以用Pi代替,掌握这一点就差不多了,还有一些更高级的定义方法,一般不用,如果是初学掌握这一点就可以了,以后慢慢学习
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
踏板摩托车没电了启动技巧 我经常睡觉时梦遗 情人节创意标语 酒店与情人节的宣传标语 为什么热敏电阻有对温度高度敏感的特性? 如何用安卓手机给电脑当摄像头用 用手机充当电脑摄像头的方法怎样用手机与电脑连接充当摄像头 EXCEL表格无法运行宏怎么解决呢 昂科威发动机舱盖电路对蓄电池短路怎么解决,仪表提示检修车辆,发动机报... 黑龙江康辉医疗器械有限公司怎么样? 在创建苹果ID时,有个提供付款方式,里面怎么没有“没有”选项?_百度知 ... 我注册apple id,付款方式没有 无 选项,怎么办啊 在apple ID注册中他要你填写付款方式,可我一个也没有,该怎么办?_百度... 怎么注册苹果手机id账号不需要银行卡 注册iPad apple ID时付款方式应该怎么选择? ipad创建Apple ID必须填支付账号吗? 为什么我注册APPLE ID 到了付款方式的那里时 没有&quot;无&quot; 这一选项啊... 为什么我用苹果手机注册ID时没有选择无付费的选项 苹果ID注册,付款方式不能选无 apple id在注册时提供付款方式选了无怎么还不行怎么解决啊 刚创建的苹果id是不是要有支付方式? 怎么跳过注册apple id的提供付款方式这步 我注册apple id,付款方式没有 无 选项,怎么办啊? 注册香港苹果id怎么跳过付款方式 寿喜锅好做吗?做这道菜的具体步骤是什么? 寿喜烧是如何做的呢? 寿喜锅由来 寿喜烧为什么蘸生鸡蛋 寿喜烧的介绍 寿喜烧和冬阴功区别 如何学葫芦丝 少儿葫芦丝教学 葫芦丝怎样入门起步? 葫芦丝教学入门指法是什么? 葫芦丝指法 葫芦丝教学入门指法? 大家学习葫芦丝是有什么感受?心得体会?最好是情感上的流露而不是简简 ... 葫芦丝应该怎样学? 葫芦丝难学吗 ?要学多久? 穿越火线最近有什么活动?详细点。 CF最新活动:今天21号,新活动出来了,可是有个地方不懂 《穿越火线》CF最新活动 冠军悬赏令 cf活动有那些 cf今天有什么活动 cf最新活动 最近的cf活动哪个能 cf新活动什么时候出? 苹果6s微信里搜一搜闪退什么原因 怎样更改微信的搜索引擎? ,.微信运动怎么搜索不到设备,无法显示步数,怎么设置,谢谢。 社保卡银联的。可以全国通用嘛?
  • 焦点

最新推荐

猜你喜欢

热门推荐