define预处理以及宏定义
define的定义方式
无参一般形式:#define 标认符 字符串 比如:#define COUTD "%d\n"
带参一般形式:#define 宏名(形参表) 字符串 比如:#define M2(a,b) ((a>b)?a:b)
#include <stdio.h>
/*宏定义的注意事项(1)不建议过多的使用宏定义来处理运算,原因是运算符表达式的优先级很容易被搞混,代码优化困难*/
/*预处理在windowsapi中很常见,会预处理很多文件,也在单片机中广泛的使用*/
#define OSTR1 0
#define OSTR2 0
#define IF_ALL_STAST(STAST) ((STAST==GP01)||(STAST==GP02)||(STAST==GP03)) //比较常用的预处理
#define COUTD "%d\n"
#define COUTS "%s\n"
#define M(y)y*y+3*y
#define CHAR char*
#define M1(a,b,c) ((a*10)+(b*20)-(c*30))
#define M2(a,b) ((a>b)?a:b)
typedef char* CHAR1; void main()
{
int GP01 = 0, GP02 = 0, GP03 = 0;
CHAR s1 = "Hello Word";
CHAR s2, s3; //这条语句相当于char *s2,s3 s2是字符指针而s3是字符变量
CHAR1 s4, s5; //这条语句相当于char *s4,*s5
int k, k1, k2;
k = M(10); //这条语句相当于k=10*10+3*10
k1 = M1(67, 87, 99)*M(90); //这种宏定义的运算尽量是不要使用
k2 = M2(10, 11);
printf(COUTD, k);
printf(COUTS, s1);
printf(COUTD, k1);
printf(COUTD, k2);
printf("s2:%d s3:%d \n", sizeof(s2), sizeof(s3));
printf("s4:%d s5:%d \n", sizeof(s4), sizeof(s5));
//以下为预编译处理的一些比较普遍的演示
#if (OSTR1==OSTR2)
printf("OSTR1等于OSTR2\n"); //OSTR1与OSTR2都是在define预处理的时候被定义
#else
printf("OSTR1不等于OSTR2\n");
#endif
if (IF_ALL_STAST(0)) //C语言中没有end关键字#endif只在预处理中出现
printf("STAST=GP01=GP02=GP03\n");
else
printf("STAST!=GP01-GP03\n"); system("pause");
}
define预处理以及宏定义的更多相关文章
- 【C语言】预处理、宏定义、内联函数 _
一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的 ...
- 【C语言】预处理、宏定义、内联函数
一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编 ...
- c 预处理的宏定义
概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所 ...
- 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...
- 09.C语言:预处理(宏定义)、字节序、地址对齐
一.预处理 预处理 gcc -E Hello.c -o hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc ...
- C预处理之宏定义
#include <stdio.h> //定义不带参数的宏 #define PI 3.14 /*********************************************** ...
- C++面试常见问题——01预处理与宏定义
C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...
- C语言预处理理论-宏定义2
宏定义21.带参宏和带参函数的区别(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的.这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行 ...
- C语言预处理理论-宏定义1
宏定义1宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.#define M ...
随机推荐
- 【leetcode】Multiply Strings(middle)
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- 程序员必须知道的git托管平台
http://www.open-open.com/lib/view/open1420704561390.html
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件.FirePHP.如果你需要将日志输出到其他地方,比如邮件.数据库等,可以很方便地进行扩展. 用法很简单,大家一看就知道.1 ...
- Map中放置类指针并实现调用
工作中使用到多进程通信,利用到了map以及multimap来进行实现. 需要做一个简单测试例子,直接上代码. /* * main.cpp * Created on: Oct 28, 2013 * Au ...
- iftop 使用
测试中常常发现服务器网卡打满,那么这些流量具体占用情况如何呢? 这个时候我们要使用iftop来看看,首先我们要安装: 一. 安装 首先安装libpcap,下载链接:http://www.tcpdump ...
- yarn介绍
hadoop 1.0 mapreduce过程 主要问题: JobTracker 是 Map-reduce 的集中处理点,存在单点故障. JobTracker 完成了太多的任务,造成了过多的资源消耗,当 ...
- ubuntu挂载磁盘
1.首先查磁盘UUID:sudo blkid 2.打开挂载文件:sudo /etc/fstab 3.写挂载文件: UUID=000860AE000FDD66 /mnt/disk1 ...
- MDK4.6和J-LINK调试出现问题,软件自动关闭,在网上收集整理的解决办法
MDK4.6配J-LINK调试时提示升级,升级完成后,弹出下图提示框后,软件自动退出. 提示原因:由于MDK4.6能识别山寨JLINK导致.网络牛人分析如下: 今天将Keil MDK升级到了V4.54 ...
- wordpress模块无法拖拽/显示选项点击无反应
问题:wordpress模块无法拖拽/显示选项点击无反应,还有编辑器的全屏什么的都用不了,按F12查看了console,提示很多jQuery is not defined... 解决方法:把wp-in ...
- Linux内核通杀提权漏洞CVE-2016-5195验证
一.漏洞简介 CVE-2016-5195这个漏洞是linux内核级的本地提权漏洞,原理是linux内核内存子系统在 处理私有只读存储映射的写入时复制机制发现了一个冲突条件.这个漏洞官方给出的影响范围是 ...