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. uva 11374

    Problem D: Airport Express In a small city called Iokh, a train service, Airport-Express, takes resi ...

  2. Codeforces Round #335 (Div. 2) A. Magic Spheres 模拟

    A. Magic Spheres   Carl is a beginner magician. He has a blue, b violet and c orange magic spheres. ...

  3. JDBC第三次学习

    这是我的JDBC第三次学习了,在学习的过程中,老是会忘掉一些知识,不记下笔记实在不行啊! 使用JDBC调用存储过程 (1)关于如何使用Navicat(11.1.13) for MySQL如何创建存储过 ...

  4. JDBC第一次学习

     JDBC(Java Data Base Connectivity,java数据库连接),由一些类和接口构成的API,它是J2SE的一部分,由java.sql,javax.sql包组成. 应用程序.J ...

  5. SIOCADDRT: No such process

    配置Ubuntu靶机遇到的问题 如果你添加/修改默认网关时遇到这个问题. 原因:你要添加的网关不在你主机所在的网段. 解决方法: 比如你要添加的网关是10.57.50.1 sudo route add ...

  6. IDT hook KiTrap03

    关于idt的基本知识就不进行赘述了,先看一个例子 0 ;------->进入内核,找到中断处理例程KiTrap03 0 这段代码执行,触发3号中断,然后开始执行KiTrap03例程,要知道,执行 ...

  7. maven本地仓库.m2文件夹路径讲解

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...

  8. spring mvc 基于注解的使用总结

    本文转自http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sprin ...

  9. div滚动条

    给DIV限定宽度或高度,并指定overflow样式为auto,这样当内空超出后就会自动出现滚动条了.如<div style="width:100px; height:100px; ov ...

  10. EL表达式取整数或者取固定小数位数的简单实现

    EL表达式取整数或者取固定小数位数的简单实现 例如${8/7} ,${6/7} ,${12/7 } 在页面的显示结果分别为: 1.1428571428571428 0.8571428571428571 ...