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预处理以及宏定义的更多相关文章

  1. 【C语言】预处理、宏定义、内联函数 _

    一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件   1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的 ...

  2. 【C语言】预处理、宏定义、内联函数

    一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编 ...

  3. c 预处理的宏定义

    概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所 ...

  4. 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

    预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...

  5. 09.C语言:预处理(宏定义)、字节序、地址对齐

    一.预处理 预处理 gcc -E Hello.c -o hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc ...

  6. C预处理之宏定义

    #include <stdio.h> //定义不带参数的宏 #define PI 3.14 /*********************************************** ...

  7. C++面试常见问题——01预处理与宏定义

    C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...

  8. C语言预处理理论-宏定义2

    宏定义21.带参宏和带参函数的区别(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的.这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行 ...

  9. C语言预处理理论-宏定义1

    宏定义1宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.#define M ...

随机推荐

  1. POJ 1503 Integer Inquiry(大数相加,java)

    题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main ...

  2. Delphi的时间处理

    这几天因为自己要学习编写一个小程序中要用到一些时间处理.就在网上搜集一些教材学习到一般的应用,做个笔记,加深印象. 用上Delphi中相应的函数,Delphi的时间处理起来还是很容易的. Delphi ...

  3. Andoid自动判断输入是电话,网址或者Email的方法----Linkify的应用!

    本节要讲的是,当我们在一个EditText输入电话或者网址还是Email的时候,让Android自动判断,当我们输入的是电话,我们点击输入内容将调用打电话程序,当我们输入是网址点击将打开浏览器程序.而 ...

  4. http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html

    http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html

  5. hadoop jobhistory解析工具汇总

    1. White Elephant是LinkedIn开源的一套Hadoop 作业日志收集器和展示器,使用mapreduce作业解析jobhistory日志,得到每个用户使用的资源情况,并通过网页展示. ...

  6. for语句中声明变量

    在C语言中,局部变量应该在函数的可执行语句之前定义,但在C++中变量可在任何语句位置定义,只要允许程序语句的地方,都允许定义变量. 在C99标准中C同C++一样允许在for循环语句中定义变量.并且这个 ...

  7. Spring框架学习之第5节

    request session global-session 三个在web开发中才有意义 如果配置成prototype有点类似于request 如果配置成singleton有点类似于web开发中的gl ...

  8. 屏幕实战效果解析:IPS/TFT/AMOLED/SLCD

    现在手机市场上,智能手机种类繁多,手机屏幕材质也是五花八门.对于一般消费者来说,一款手机是否值得购买,除了关心它的硬件参数以外,更重要的一点就是看它的屏幕.除了屏幕尺寸以外,影响着大家对该手机的第一感 ...

  9. logstash_agent.conf 语法注意事项

    编写配置文件时要注意语法,如新版本的logstash对参数host变更为hosts,去除了port参数等. [root@localhost logstash]# cat logstash_agent. ...

  10. Git设置及GitHub的使用

    把github上的help略略翻译一遍.备忘. First : 安装:ubuntu 下,终端输入命令: sudo apt-get install git-core git-gui git-doc Ne ...