c--> #define 定义宏
#define 定义宏
宏(Macro)是预处理命令的一种,它允许用一个标识符来表示一个字符串
1.有关定义宏的代码末尾不需要添加";"(分号)
2.定义宏define在计算的式子中相当于替代,类似于数学中的需要带入数值的x
#include <stdio.h>
#define ADD(x,y) x+y
int main(){
printf("%d\n", 3 * 2 + ADD(2, 2) * 2);//3*2+2+2*2=12
return 0;
}
#include <stdio.h>
#define ADD(x,y) (x+y)
int main(){
printf("%d\n", ADD(2, 2) * 3);//(2+2)*3=12
return 0;
}
3.宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。例如:
#define PI 3.14159
int main(){
// Code
return 0;
}
#undef PI
void func(){
// Code
}
表示 PI 只在 main() 函数中有效,在 func() 中无效。
4.代码中的宏名如果被引号包围,那么预处理程序不对其作宏代替,例如:
#include <stdio.h>
#define OK 100
int main(){
printf("OK\n");
return 0;
}
运行结果:OK
语法:
define 宏名 宏的内容
带参宏定义的一般形式为:
#define 宏名(形参列表) 字符串
有两种形式:
类似与定义常量: #define MAX 100
类似与定义函数:#define ADD(x,y) x+y
c--> #define 定义宏的更多相关文章
- 结构体中使用#define定义宏
struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* ...
- #define定义宏函数 的正确使用
如何使用宏来定义一个自定义函数呢?首先我们来看下面这段代码 #define SQUARE(x) x*x int main() { int a = 5; printf("SQUARE(a): ...
- const define 定义常量的区别
1.用const定义常量在编译的时候,提供了类型安全检查,而define 只是简单地进行字符串的替换 2.const定义的常量,会分配相应的内存空间.而define没有分配空间,只是在程序中与处理的时 ...
- const变量与define定义常量的区别
一.概念性区别 const 变量就是在普通变量前边加上一个关键字const,它赋值的唯一机会就是“定义时”,此变量不能被程序修改,存储在rodata区. define定义的是常量,不是变量,所以编译器 ...
- 使用#define定义字面值和伪函数
#define是C语言提供的宏命令,其主要目的是:在编程时,为程序员提供一定方便,并能在一定程度上提高程序的执行效率.#define将一个标示符定义为一个字符串,该标示符被称为宏,被定义的字符串称为字 ...
- C/C++中define定义的常量与const常量
常量是在程序中不能更改的量,在C/C++中有两种方式定义常量,一种是利用define宏定义的方式,一种是C++中新提出来的const型常变量,下面主要讨论它们之间的相关问题: define定义的常量: ...
- UIKIT_EXTERN和define定义常量
看过我其他的博客的人都知道,我喜欢用define定义常量,最近看了一个开源的轮子,使用UIKIT_EXTERN这个定义的常量,了解了一下,发现使用宏定义的常量会在内存中临时开辟一份内存空间,而使用UI ...
- 预定义宏,C语言预定义的宏详解
1.预定义宏 对于预定义宏,相信大家并不陌生.为了方便处理一些有用的信息,预处理器定义了一些预处理标识符,也就是预定义宏.预定义宏的名称都是以"__"(两条下划线)开头和结尾的,如 ...
- C预定义宏
作用:对于__FILE__,__LINE__,__func__这样的宏,在调试程序时是很有用的,因为你可以很容易的知道程序运行到了哪个文件的那一行,是哪个函数. 下面一个例子是打印上面这些预定义的宏的 ...
- latex如何定义宏,插图统一尺寸减少工作量
问题背景是这样的,因为我要在文中插入一系列的图片,但是这些图片的大小我要保持一致,来达到预期的效果. 比如我有三个figure,这三个figure中,每个figure里面有两行,5列图片,我想要的是, ...
随机推荐
- Flutter入门资料推荐
前言 群里很多入门小白不知道如何入门 Flutter,水一篇文章简单介绍下本人学习过程中一些参考资料,方便 Flutter 小白少走弯路. 非权威,推荐只针对本人经验来的说,大佬们不喜勿喷! 资料列表 ...
- 请求的URI过长:414 Request-URI Too Large
问题:在项目中遇到使用get 请求,发现前端传递的参数超过nginx 服务器的限制.三种解决方法(任选一种): 1.在nginx配置文件里面把这两个缓存加大 文件位置:conf/nginx.conf ...
- 【随笔记】NDK 编译开源库 nghttp2/openssl/curl
工作中有遇到需要使用支持 http2 访问的 https 安全加密的开源库,便于使用 http2 与云端通信,经过调研发现 libcurl 可以满足需求,但是 libcurl 本身也是需要依赖于 ng ...
- STL序列式容器使用注意、概念总结
引入 最近看了<STL源码剖析>的第 4 章和第 5 章,介绍了 C++ STL 中的序列式容器和关联式容器,本文将总结序列式容器的基础概念,不会详细它们的实现原理(想知道自个儿看书吧,我 ...
- 各种排序算法实现(JAVA)
转载: https://blog.csdn.net/qq_42453117/article/details/100036347 Exer010Sort01BubbleSortV1 import ja ...
- 【动画笔记】数据结构-AVL树的插入操作
本笔记前置知识: 二叉搜索(排序)树及其插入操作. 本文主要围绕AVL树的平衡因子.纸上做题思路.失衡类型(LL/RR/LR/RL).失衡调整方法.插入后回溯这几部分知识点展开. 注: 本笔记中的平衡 ...
- 面向对象程序设计(二):C++模板初探
背景:老师留了一个作业,对两个数组进行相加,但是总是会出现错误:首先我们需要知道当数组作为参数传递的时候是不能用 sizeof 的,因为当数组传入子函数就变成了普通的数组头:这时候使用 sizeof ...
- 计算机网络14 Internet网络层主要功能 IP协议 路由协议 ICMP协议
1 主机.路由器网络层主要功能 2 IP数据报 2.1 图示 2.2 字段详细介绍 1)版本号 占4位:IP协议的版本号.4表示IPv4,6表示IPv6. 2)首部长度 占4位:表示IP分组首部长度. ...
- Nginx08 通过扩容提升整体吞吐量 nginx平滑升级-添加sticky模块和使用
1 扩容方式介绍 一个单一站点,想要扩,可以从硬件软件等多个方面来进行. 1 单机垂直扩容:硬件资源增加 2 水平扩展:集群化 3 细粒度拆分:分布式 3-1 数据分区 3-2 上游服务SOA化(原生 ...
- STM32F0库函数初始化系列:PWM输出
void TIM1_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_Time1BaseStructure; TIM_OCInitTypeDef TI ...