在主函数内使用宏定义
之前习惯于在主函数外面使用宏定义,但实际上主函数内也可使用,例:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<stdint.h>
#include<string.h>
#include<assert.h>int main()
{char g[9]={'9','8','7','2','1','5','6','3','4'};#define min(x, y) ((x) < (y) ? (x) : (y))char *const end_ptr=&g[8];char *tmp_ptr=g;char *tresh=min(end_ptr,tmp_ptr+12);printf("%ld\n%ld\n",(intptr_t)(int *)(end_ptr),(intptr_t )(int *)(tmp_ptr+12));printf("%c\n",*tresh);return 0;
}
运行结果为
140730577384423
140730577384427
4
这段代码是找到两个指针中地址最小的那个并输出它所指向的元素,当然,tmp_ptr+12所指的位置早就超出char数组g的范围之外了。
那就改成不越界的:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<stdint.h>
#include<string.h>
#include<assert.h>int main()
{char g[9]={'9','8','7','2','1','5','6','3','4'};#define min(x, y) ((x) < (y) ? (x) : (y))char *const end_ptr=&g[8];char *tmp_ptr=g;char *tresh=min(end_ptr,tmp_ptr);printf("%ld\n%ld\n",(intptr_t)(int *)(end_ptr),(intptr_t )(int *)(tmp_ptr));printf("%c\n",*tresh);return 0;
}
运行结果:
140737052257751
140737052257743
9
**注意:
printf("%ld\n%ld\n",(intptr_t)(int *)(end_ptr),(intptr_t )(int *)(tmp_ptr));
用于输出指针end_ptr和tmp_ptr的值,也就是地址;**
在主函数内使用宏定义相关推荐
- unity android 宏定义,Unity各平台内置宏定义
属性 方法 UNITY_EDITOR #define directive for calling Unity Editor scripts from your game code. UNITY_EDI ...
- linux系统中查看gcc内置宏定义的命令方法
GNU C预定义了一系列的宏,这些宏都是以双下划线开始的 查看内置宏的命令 gcc -dM -E - < /dev/null [qipa250@localhost ~]$ gcc -dM -E ...
- likely() 和 unlikely()内建宏定义函数
这给出列内建函数可能发生和不可能发生的编译选项,这是一个预处理,在代码被编译成二进制后,程序在运行时候由于if/else if/else或者其他类型的"地址转换"过程,通过使用li ...
- 如何把定义的数组传回主函数_java数组如何定义
Java中定义数组的语法有两种: 动态方式(指定数组的长度) 格式: 数据类型[] 数组名字 = new 数组存储的数据类型[长度]; [] : 表示数组. 数组名字:为定义的数组起个变量名,满足标识 ...
- c语言中void和define,C语言里面的内联函数(inline)与宏定义(#define)探讨
C语言里面的内联函数(inline)与宏定义(#define)探讨 先简明扼要,说下关键: 1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样 ...
- 宏定义函数与普通函数的区别
目录 前言 1 宏定义函数与普通函数不同 1.1 编译过程上不同 1.2 执行过程上不同 2 批判分析 3 内联函数 前言 可以在前面的系列文章中看到,FreeRTOS 的 头文件中定义了大量的宏定义 ...
- C语言 | 预处理 | 宏定义 | #define | 定义函数
文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...
- 宏定义函数和普通函数
宏定义函数: 预处理阶段进行简单的文本替换,没有入栈.出栈.参数传递和函数返回等等工作,执行效率明显高于普通函数,因此,简短并且被频繁调用的函数经常用宏定义函数来代替实现 没有参数检查,会影响程序安全 ...
- 老铁们来区分函数和宏定义的速度了哈!
于是他们展开了函数和宏定义之间的激烈讨论 这样这样这样:1.函数调用 2 .计算 3.函数返 ...
最新文章
- zabbix企业应用之固定端口监控redis
- Azure:不能把同一个certificate同时用于Azure Management和RDP
- 首发:适合初学者入门人工智能的路线及资料下载
- UI5 table display visible row count logic calculation calculate
- 【转】Castle中AdditionalInterfaces用法介绍
- 优秀!本科生发表Nature论文,直博美国顶尖名校
- java mongodb 模糊查询_Java操作MongoDB插入数据进行模糊查询与in查询功能的方法
- 16进制颜色转换为UIColor
- PXE远程CentOS安装anaconda报错
- MyBatis执行原理图
- c语言一些简单的程序
- 如何成为一名AI人工智能算法工程师?
- AXI 总线基本概念 - 如何理解outstanding传输
- ADF单位根检验三种形式_【EViews】面板数据的处理方法及检验步骤
- Struck跟踪算法介绍及代码解读(二)
- 计算机考试的知识要记忆背,2019年3月计算机等级考试这样复习才更有效率
- latex教程——读书笔记整理(三)——数学公式
- 第2次作业:微信案例分析
- 浙江省CIO峰会|数据安全+数字化转型,美创特色实践获“年度数字化赋能服务商”
- 考研复试c语言面试题三峡,2017年三峡大学C语言程序设计(复试)考研真题硕士研究生入学考试试题...