首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
C语言 宏函数 如何 declare 独一无二的名字
2024-10-31
C语言宏的定义和宏的使用方法(#define)
1.宏的功能介绍 在 C 语言中,可以采用命令 #define 来定义宏.该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句.在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉. 关于宏的一个常见应用就是,用它定义数值常量的名称: #define ARRAY_SIZE 100 double data[ARRAY_SIZE]; 这两行代码为值 100 定义了一个宏名称 ARRAY_SIZE,并且在数组 data 的定义中使用了该宏.惯例将宏名称
C 语言宏定义函数编写时 do-while 的妙用和一些注意事项
在 C 语言中,我们都知道可以用宏定义来编写函数,一般称为宏函数.如果一个宏函数比较复杂,那么在编写这样的宏函数是有一定技巧和注意事项的.文章给出一些我认为值得关注的地方,以及一些注意事项(个人建议),最后介绍了一种使用 do-while 语句来编写宏定义函数的技巧.下面我将从简单到复杂,以便于大家理解. 一个简单的例子 宏定义函数最简单的情况便是只有一条语句.下面我给出了四个例子,请仔细观察各个例子之间的区别,并尝试思考哪些是可以正确运行的. /* 例子 1 */ #include <stdi
C语言宏定义函数中的“_##”的意思
最近在看google vp9的代码的时候碰到: #define intra_pred_sized(type, size) \ void vp9_##type##_predictor_##size##x##size##_c(uint8_t *dst, \ ptrdiff_t stride, \ const uint8_t *above, \ const uint8_t *left) { \ type##_predictor(dst, stride, size, above, left); \ }
C语言宏的高级应用
原文:C语言宏的高级应用 关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号.比如下面代码中的宏: #define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "); } ) 那么实际使用中会出现下面所示的替换过程: WARN_IF (divider == );被替换为 do { ) f
c语言宏定义
一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利. 1 #define命令剖析 1.1 #define的概念 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为
【学习笔记】【C语言】函数
一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一个MP3播放器程序,那么它的程序结构如下图所示: 二. 函数的定义 1. 定义函数的目的 将一个常用的功能封装起来,方便以后调用 2. 定义函数的步骤 函数名:函数叫什么名字 函数体:函数是干啥的,里面包含了什么代码 3. 格式 固定格式(很多语言的函数都是这么写的) 返回值类型 函数名(形式参数列
c语言宏定义#define的理解与资料整理
1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认识这个宏了:也可以把任何东西定义成宏.因为编译器会在预编译的时候用真身替换替身,而在我们的代码里面却又用常常用替身来帮忙. 看例子: #define PI 3.141592654 在此后的代码中你尽可以使用PI 来代替3.141592654,而且你最好就这么做.不然的话,如果我要把PI 的精度再提高
C语言的本质(15)——C语言的函数接口入门
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返回值来描述这个协议,只要函数名和参数名命名合理,参数和返回值的类型定义的准确,调用者仅仅通过函数接口就能知道函数的用法.当函数接口不能表达函数的全部语义时,文档就起了重要的补充作用,函数文档的写法我们可以参照Linux下的Man Page或MSDN. 下面通过分析C标准库函数来说明函数接口: 在Li
14-C语言宏
目录: 一.宏定义 二.#x,##x使用和预定义宏 三.宏的高级使用(条件编译) 回到顶部 一.宏定义 1 宏是常用的预处理功能之一,是在编译之前进行宏替换,即将宏名替换成所定义的宏体. 2 优点:可以使代码更简单,更容易,避免大量使用. 3 宏定义 定义在函数外面: 格式:#define PI 3.14 PI为宏的文件内容 在编译前将PI的内容替换成3.14 4 宏与全局变量的区别 宏相当于字符串的替换操作,内存中不存在 全局变量在内存中是存在的. 相同点:通常定义一个全局变量加上const修
C语言宏的特殊用法和几个坑(转)
总结一下C语言中宏的一些特殊用法和几个容易踩的坑.由于本文主要参考GCC文档,某些细节(如宏参数中的空格是否处理之类)在别的编译器可能有细微差别,请参考相应文档. 宏基础 宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见.基本用法如下: 1. 标示符别名 #define BUFFER_SIZE 1024 预处理阶段,foo = (char *) malloc (BUFFER_SIZE);会被替换成foo = (char *) malloc (1024); 宏体换行需要在行末
linux c语言 select函数用法
linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout); 函数说明 select()用来等待文件描述词状态的改变.参数n代表最大的文件描述词加1
go语言学习-函数
函数声明 函数声明包括函数名,形参列表,返回值列表(可选),函数体组成 func test(parameters) (returns) { // ... } 其中 parameters 就是函数的形参列表,描述了函数的参数名和参数类型,可以没有参数但是这个括号不可以省略; returns就是返回值列表,描述了函数返回值的变量名(可选)和类型, 如果函数返回一个没有名字的参数或者没有返回值,就可以不要括号 这里的参数和返回值的类型都不能省略,不过可以简写(如果有的话) 例如: func add(x
【R】R语言常用函数
R语言常用函数 基本 一.数据管理vector:向量 numeric:数值型向量 logical:逻辑型向量character:字符型向量 list:列表 data.frame:数据框c:连接为向量或列表 length:求长度 subset:求子集seq,from:to,sequence:等差序列rep:重复 NA:缺失值 NULL:空对象sort,order,unique,rev:排序unlist:展平列表attr,attributes:对象属性mode,typeof:对象存储模式与类型nam
将C语言宏定义数值转换成字符串!
将C语言宏定义转换成字符串! 摘自:https://blog.csdn.net/happen23/article/details/50602667 2016年01月28日 19:15:47 六个九十度 阅读数:10185 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/happen23/article/details/50602667 适用场景举例 流媒体处理系统中,采样率是个很重要的参数,很多地方都要用,如果用来分配内存,则 #define
c语言宏定义#define
1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认识这个宏了:也可以把任何东西定义成宏.因为编译器会在预编译的时候用真身替换替身,而在我们的代码里面却又用常常用替身来帮忙. 看例子: 1 #define PI 3.141592654 在此后的代码中你尽可以使用PI 来代替3.141592654,而且你最好就这么做.不然的话,如果我要把PI 的精度再
c语言宏
使用 c语言的宏是在预处理时候对字符进行简单替换. 优点:1.如果要改一个变量,只需要改宏就可以了,也就是只改一次;2.宏函数展开和普通函数一样,但是它没有普通函数调用的过程,不需要压栈出栈等操作,所以效率高. 缺点:增大了编译后可执行文件的大小 比如常见的 #define MAX(a,b) ((a)>(b)?(a):(b)) 变量使用括号包围,否则这样调用时 MAX(+,+) 结果并不是我们想要的 即使使用括号包围了,宏依然是有陷阱的,比如这样调用 a = ; MAX(a++, ) 宏展开之后
C语言中函数和指针的參数传递
近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个数据引用同一个数据,那么更改随意的一个都相当于更改了本体,那么还有一个数据所相应的值也会改变.但是C中是没有这个概念的.所以就产生了一些东西.和我们本来想的有区别. 一.明白C语言中函数的入口: C语言中函数的形參负责接收外部数据.那么数据到底怎么进入函数的呢.事实上我们在函数体内操作的形參仅仅是传
C语言回调函数详解
1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君.感觉这个让人更容易想到的是异步操作,而不是回调.另外还有两句英文让我印象深刻:1) If you call me, I will call you back; 2) Don't call me, I will
[转]c语言宏定义#define的理解与资料整理
原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认识这个宏了:也可以把任何东西定义成宏.因为编译器会在预编译的时候用真身替换替身,而在我们的代码里面却又用常常用替身来帮忙. 看例子: 1 #define PI 3.141592654 在此后的代码
R语言table()函数
R语言table()函数比较有用,两个示例尤其是混淆矩阵这个案例比较有用: 例子一:统计频次 z<-c(1,2,2,4,2,7,1,1);z1<-table(z);summary(z1); z1#实现z中各数据频次的统计z1 2 4 7 3 3 1 1 names(z1)#居然是有名字的[1] "1" "2" "4" "7"例子二:实现混淆矩阵 t=table(c(1,0,1,1,1,0,0,1),c(0,0,1,
linux c语言 select函数使用方法
linux c语言 select函数使用方法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout); 函数说明 select()用来等待文件描写叙述词状态的改变.參数n代表最大的文件描
热门专题
mysql 显示datetime的格式
recvfrom 阻塞
如何用perf检查sys cpu
springmvc异步下载
FTK创建镜像文件预计时间很长是为什么
Spring的事务和数据库的事务隔离是一个概念么
centos8.3离线安装nmap
微信小程序 nginx 反向代理 盗站
Webkitbrowser.dll显示不全
发布网页时显示由于权限不足无法读取文件怎么办
datagrid设置列宽自适应 wpf
uipath 切换组件
document 移除元素
cacti与zabbix的数据库区别
BOOTICEv0.72引导扇区维护工具
vue上传文件控件效果
linux内核头文件运行时头文件不存在
腾讯微云ios版本跟安卓的区别
matlab图片大小归一化
C# 采集麦克风输入