之前习惯于在主函数外面使用宏定义,但实际上主函数内也可使用,例:

#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的值,也就是地址;**

在主函数内使用宏定义相关推荐

  1. unity android 宏定义,Unity各平台内置宏定义

    属性 方法 UNITY_EDITOR #define directive for calling Unity Editor scripts from your game code. UNITY_EDI ...

  2. linux系统中查看gcc内置宏定义的命令方法

    GNU C预定义了一系列的宏,这些宏都是以双下划线开始的 查看内置宏的命令 gcc -dM -E - < /dev/null [qipa250@localhost ~]$ gcc -dM -E ...

  3. likely() 和 unlikely()内建宏定义函数

    这给出列内建函数可能发生和不可能发生的编译选项,这是一个预处理,在代码被编译成二进制后,程序在运行时候由于if/else if/else或者其他类型的"地址转换"过程,通过使用li ...

  4. 如何把定义的数组传回主函数_java数组如何定义

    Java中定义数组的语法有两种: 动态方式(指定数组的长度) 格式: 数据类型[] 数组名字 = new 数组存储的数据类型[长度]; [] : 表示数组. 数组名字:为定义的数组起个变量名,满足标识 ...

  5. c语言中void和define,C语言里面的内联函数(inline)与宏定义(#define)探讨

    C语言里面的内联函数(inline)与宏定义(#define)探讨 先简明扼要,说下关键: 1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样 ...

  6. 宏定义函数与普通函数的区别

    目录 前言 1 宏定义函数与普通函数不同 1.1 编译过程上不同 1.2 执行过程上不同 2 批判分析 3 内联函数 前言 可以在前面的系列文章中看到,FreeRTOS 的 头文件中定义了大量的宏定义 ...

  7. C语言 | 预处理 | 宏定义 | #define | 定义函数

    文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...

  8. 宏定义函数和普通函数

    宏定义函数: 预处理阶段进行简单的文本替换,没有入栈.出栈.参数传递和函数返回等等工作,执行效率明显高于普通函数,因此,简短并且被频繁调用的函数经常用宏定义函数来代替实现 没有参数检查,会影响程序安全 ...

  9. 老铁们来区分函数和宏定义的速度了哈!

     于是他们展开了函数和宏定义之间的激烈讨论  这样这样这样:1.函数调用                           2 .计算                           3.函数返 ...

最新文章

  1. zabbix企业应用之固定端口监控redis
  2. Azure:不能把同一个certificate同时用于Azure Management和RDP
  3. 首发:适合初学者入门人工智能的路线及资料下载
  4. UI5 table display visible row count logic calculation calculate
  5. 【转】Castle中AdditionalInterfaces用法介绍
  6. 优秀!本科生发表Nature论文,直博美国顶尖名校
  7. java mongodb 模糊查询_Java操作MongoDB插入数据进行模糊查询与in查询功能的方法
  8. 16进制颜色转换为UIColor
  9. PXE远程CentOS安装anaconda报错
  10. MyBatis执行原理图
  11. c语言一些简单的程序
  12. 如何成为一名AI人工智能算法工程师?
  13. AXI 总线基本概念 - 如何理解outstanding传输
  14. ADF单位根检验三种形式_【EViews】面板数据的处理方法及检验步骤
  15. Struck跟踪算法介绍及代码解读(二)
  16. 计算机考试的知识要记忆背,2019年3月计算机等级考试这样复习才更有效率
  17. latex教程——读书笔记整理(三)——数学公式
  18. 第2次作业:微信案例分析
  19. 浙江省CIO峰会|数据安全+数字化转型,美创特色实践获“年度数字化赋能服务商”
  20. 考研复试c语言面试题三峡,2017年三峡大学C语言程序设计(复试)考研真题硕士研究生入学考试试题...

热门文章

  1. JAVA学习笔记五---函数
  2. 华为手机有哪些隐藏功能,用了才知道太好用啦!
  3. 抖音如何热门,发布不会提示重复
  4. 亚马逊SP-API申请 PII权限申请 ERP开发 开发人员注册
  5. 快速聊天回复神奇工具程序软件下载
  6. lumen 配置数据库结果自动转数组_Laravel Lumen 数组操作
  7. B2B的商务模式主要存在哪些缺点?
  8. 补充下3月面试题(好未来、腾讯音乐、小药药)
  9. python表白玫瑰花绘制——情人节表白
  10. linux查看pcie网卡命令,ubuntu查看系统pci命令 (可查看网卡,声卡等设备型号)