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 ...
随机推荐
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)
题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是 ...
- strncpy 和 strcpy的区别 (要抽时间重点看,未完待续)
strcpy的实现: //GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++=*s++)); ...
- Linux Mint 17 + 小米WIFI创建手机热点
转载:http://www.pppei.net/blog/post/690 亲测可行! 我的系统是linux mint 17.1 64位,所用wifi位小米WIFI. 以下是原文: 此方法在linux ...
- Qt之窗体透明 (三种不同的方法和效果)
关于窗体透明,经常遇到,网上的资料倒不少,也不知道写的时候是否验证过,很多都不正确...今天就在此一一阐述! 以下各效果是利用以前写过的一个小程序作为示例进行讲解!(代码过多,贴主要部分) ...
- C#:MapControl基本操作代码整理
整理了 MapConrol各基本功能的实现代码 using System; using System.Collections.Generic; using System.Linq; using Sys ...
- js获取滚动条距离浏览器顶部,底部的高度,兼容ie和firefox
做web开发经常会碰到需要获取浏览器的滚动条与顶部和底部的距离,然后做相应的处理动作.下面作者就如何通过js来获取浏览器滚动条距离浏览器顶部和底部的高度做一下分享,这个是同时兼容ie和firefox的 ...
- mysql view
定义:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 1.视图是一个虚拟存在的表,视图可以包含表的全部或者部分记录,也可以由一个表或者多个表来创建.使用视图就可以不用看到数据表中的所有 ...
- USACO Section 4.2: Drainage Ditches
最大流的模板题 /* ID: yingzho1 LANG: C++ TASK: ditch */ #include <iostream> #include <fstream> ...
- dojo 十一 jsonp
官方教程:Getting Jiggy with JSONPDojo对Ajax实现的框架XHR的功能很强大,但 XHR 框架的函数有一问题就是不能跨域访问,浏览器不允许 XHR 对象访问其他域的站点.此 ...
- ubuntu 14.04 与 CentOS 升级GCC/G++至5版本
# 支持 ubuntu 14.04 add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update apt-get i ...