问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

新手关于c语言点#define的问题

发布网友 发布时间:2022-04-23 05:32

我来回答

4个回答

热心网友 时间:2023-10-16 14:00

1. 什么也没定义, 相当于空字符串, 主要作用就是, 让编译器知道, stdio.h 这个头文件已经被引用了从而避免重复引用

2. 多半还是有 #endif, 但它可能是在头文件的最末端

3. #pragma 是编译器根据特定操作系统或者编译环境, 用于精细控制编译过程的一系列,起标志作用的"宏语句", 具体内容和指令含义同编译器, 操作系统密切相关, system_include 看起来像是告诉编译器, 如果 "system" 已经 build, 那么就把和它相关的某些内容包含在内, 当然这个是我猜的, 我不知道你用什么环境.......

这些都是头文件里面的, 考虑到 #include 的作用就是相当于把被引用的文件复制一份到 你的源文件中, 所以要有一定的技巧避免重复引用

比如说, 你一个 x.c 里面有如下内容: #include "x.h"
而 x.h 里面有一系列函数, 类型, 变量的声明, 比如说 struct XXX { int x; };
int XXX_f1 ( int, int ); ......
static int XXX_num = 0;
.....
这样如果你的任何一个源文件 x.c, y.c 里面如果出现了两次 #include "x.h"......编译程序就会报错.....重复声明和定义问题

当然你可以说, 我会小心不出现两次 #include "x.h".....但是, 你很难避免里面出现
#include "a.h"
#include "b.h"
而其中 a.h 又引用了 x.h......

热心网友 时间:2023-10-16 14:00

.............
我对你很无语.我觉得你更应该去补习一些基础知识而不是读这样的源代码

1._STDIO_INCLUDED 被宏定义成什么
不一定要定义出值,只要象下面一行一样有定义就可以了.这个宏是用来检查头文件有没有被重复引用的.

2.第一个#ifndef为什么没有#endif结尾
这个结尾在这个头文件的最后面.大部分应该是在最后一行

3. #pragma system_include 这是什么玩耶?????
#pragma是编译程序实现时定义的指令,他允许由此向编译程序传入各种指令
我没用过,抄的书

热心网友 时间:2023-10-16 14:01

上面基本都说到了,你需要学习一下C语言 预编译指令
做项目时一般都会碰到,不过在校生的话确实比较少去写

热心网友 时间:2023-10-16 14:01

  #define叫做预处理宏定义命令,它的具体作用,就是方便程序段的定义和修改,提高程序的运行效率。

  无参宏定义中,一般形式为:#define 标识符 字符串
  其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。
  #define M (a+b) 它的作用是指定标识符M来代替表达式(a+b)。在编写源程序时,所有的(a+b)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(a+b)表达式去置换所有的宏名M,然后再进行编译。

  程序1:
 #include<stdio.h>
  #define M (a+b)
  int main(vido)
  {
  int s,a,b;
  printf("inputnumbera&b:");
  scanf("%d%d",&a,&b);
  s = M*M;
  printf("s=%d\n",s);
  }
  对于宏定义还要说明以下几点:
  1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
  2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
  3.宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。  (有关#undef 请查阅其他资料)

  宏定义优点:
  (1) 方便程序的修改
  使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时, 我们可以用较短的有意义的标识符来写程序,这样更方便一些。我们所说的常量改变不是在程序运行期间改变,而是在编程期间的修改,举一个大家比较熟悉的例 子,圆周率π是在数学上常用的一个值,有时我们会用3.14来表示,有时也会用3.1415926等,这要看计算所需要的精度,如果我们编制的一个程序中 要多次使用它,那么需要确定一个数值,在本次运行中不改变,但也许后来发现程序所表现的精度有变化,需要改变它的值, 这就需要修改程序中所有的相关数值,这会给我们带来一定的不便,但如果使用宏定义,使用一个标识符来代替,则在修改时只修改宏定义即可,还可以减少输入 3.1415926这样长的数值多次的情况,我们可以如此定义 #define pi 3.1415926,既减少了输入又便于修改,何乐而不为呢?
  (2) 提高程序的运行效率
  使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。正如C语言中所讲,函数的使用可以使程序更加模块化,便于组织,而且可重复利用,但在发生函数调用时,需要保留调用函数的现场,以便子函数执行结束后能返回继续执行,同样在子函数执行完后要恢复调用函数的现场,这都需要一定的时间,如果子函数执行的操作比较多,这种转换时间开销可以忽略,但如果子函数完成的功能比较少,甚至于只完成一点操作,如一个乘法语句的操作,则这部分转换开销就相对较大了,但使用带参数的宏定义就不会出现这个问 题,因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。宏定义可完成简单的操作,但复杂的操作还是要由函数调用来完成,而且宏定义所占用的目标代码空间相对较大。所以在使用时要依据具体情况来决定是否使用宏定义。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 怎样更换蜂王? 网站中放视频 重装系统出现如下代码如何解决: 家里面有老鼠,该怎么处理? 家里有老鼠,如何灭鼠 家里经常有老鼠,怎么办最好? 家里有老鼠怎么办,怎样才可以把它消灭? 家里有老鼠怎么办呢? 家里有老鼠怎么办?急啊! 家里有很多老鼠怎么办? 家里有老鼠怎么办 怎么消灭掉 急!求一元旦小品,5到7个人,全男生,不要太长,不要他爸他妈,急啊!要搞笑啊! 当收到女生微信回复说:谢谢你啊,请你别发与工作无关的信息给我哈,我不希望我男朋友误会了 求一则 爆笑的 笑话 求好看的耽美文啊(非骨灰级慎入) 求女主是御坂美琴的同人小说,字数要多一点,百合也没关系,男主的话不... 救救我吧,求求你了啊 幽默笑话不要黄文举例:不是本地人的那个小故事 假如看到自己的女儿被男生亲了一下嘴,你会怎么办? 求~ 一攻N受小说 要多啊~ 不要一受n攻的 看好题目啊啊啊啊 邮箱是 1119780889@qq.com 如何更换蜂王? 原道n5pro2的解锁图案忘了怎么办,没有那个什么账号 怎么换新王? HTML video变量 怎样换蜂王 Embed this video on your site with this html是什么意思啊? 一箱蜂怎么换王? Your browser does not support the video tag. 什么意思,为什么要在html5视频播放器代码后加这条语句? 中蜂怎样换王? 蜂王多久需要更换? 在html5用video标签的时候,地址怎么写? 秋季养蜂人工育王,更换新蜂王需要注意什么? 。src为空的时候不显示,怎么写 职业化的养蜂人为什么要经常更换蜂王? &quot;Adult&quot; video or film,pornographic video是什么意思 秋季蜂群更换新蜂王,在继箱内介入蜂王台的方法有哪些? 关于花的谜语和答案 你觉得养蜂人更换蜂王的时候要注意哪些事情? 为什么职业化的养蜂人要经常更换蜂王? http:&#47;&#47;www.g6hentai.com&#47;video&#47;1068&#47;to-love-ru-3d-hentai-movie-diary-gold是什么游戏