现在还没怎么用到宏定义,但以后肯定会经常用的,写下这盘,以后忘记了可以温故。首先宏定义必须写在函数之外,其作用域从宏定义命令起到源程序结束,也就是说一但定义系统就会分配内存,想让它结束用“#undef“命令,格式如下:#define 标识符 字符串,记住不能加封号,假如宏名在源程序中用双引号括起来,则已成为字符串中的字符,预处理程序不对其进行宏替换,例子:

 #include "stdio.h"
#define OK 100
void main()
{
printf("OK");
}

其结果还是为:OK。宏定义还允许嵌套,比如:#define p 1314   #define q p*p,用宏定义可以简单化你的代码,至少打的字少很多,假如我们要输出五个数并且要换行,是不是要打五个%d和\n,现在用宏定义试一下:

 #include "stdio.h"
#define x "%d
#define y \n
#define x1 %d
#define y1 \n"
void main()
{
int a=,b=,c=,d=;
printf(x y x1 y x1 y x1 y1,a,b,c,d);
}

从代码可以看出x y x1 y x1 y x1 y1=="%d\n%d\n%d\n%d\n",但是结果是不能运行的,这说明我们不能一一代入,还是要尊重下宏定义的规则,例如这样:

 #include "stdio.h"
#define x "%d"
#define y "\n"
void main()
{
int a=,b=,c=,d=;
printf(x y x y x y x y,a,b,c,d);
}

这样就可以运行。宏定义还可以定义一些简单的函数,格式如下:#define 宏名(形参表) 字符串,来做个比较容易混淆的例子:

 #include "stdio.h"
#define SQ(y) y*y
main()
{
int a,b;
scanf("%d",&a);
b=SQ(a+);
printf("%d",b);
}

运行结果:aaarticlea/png;base64,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" alt="" />,一开始我以为是16,但是其运行过程是:a+1*a+1;因为上面宏定义是y*y,当我们把y*y改成(y)*(y),其结果是:aaarticlea/png;base64,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" alt="" />

其中运行过程是:(3+1)*(3+1)=16.

C:宏定义的一些格式(怕忘记)的更多相关文章

  1. C语言中的宏定义

    目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...

  2. iOS 日常工作之常用宏定义大全

    转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...

  3. VC中预处理指令与宏定义详解

    刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个 ...

  4. iOS日常工作之常用宏定义大全

    前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了怎么办?本人在工作中也是如此.所以在这里给大家分享一些常用的宏定义,喜欢的小伙伴可 ...

  5. c语言宏定义#define的理解与资料整理

    1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...

  6. C 宏定义

    C/C++中宏使用总结 .C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释 ...

  7. linux C宏定义 转

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_H ...

  8. c语言宏定义#define

    1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...

  9. [转]c语言宏定义#define的理解与资料整理

    原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也 ...

随机推荐

  1. 0:A+B Problem-poj

    0:A+B Problem 总时间限制:  1000ms 内存限制:  65536kB 描述 Calculate a + b 输入 Two integer a,,b (0 ≤ a,b ≤ 10) 输出 ...

  2. CNCC2017中的深度学习与跨媒体智能

    CNCC2017中的深度学习与跨媒体智能 转载请注明作者:梦里茶 目录 机器学习与跨媒体智能 传统方法与深度学习 图像分割 小数据集下的深度学习 语音前沿技术 生成模型 基于贝叶斯的视觉信息编解码 珠 ...

  3. PHP招聘那些事,公司真的不需要培训班出来的人么?

    就业形势严峻的情况下,每个企业对于人才的需求都不一样,并不是说公司不愿意招聘培训班出来的人,而是看你的能力是不是能胜任企业招聘人才的需求,是不是能给企业带来价值的人. 现在市面上的培训机构多如牛毛,然 ...

  4. php XSS安全过滤代码

    function remove_xss($val) { // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are ...

  5. 使用fastdfs-zyc监控FastDFS文件系统

    1.安装jdk运行环境 jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 此处我使用的jdk7U99 ...

  6. .9-浅析webpack源码之NodeEnvironmentPlugin模块总览

    介绍Compiler的构造比较无趣,不如先过后面的,在用到compiler的时候再做讲解. 这一节主要讲这行代码: // 不管这里 compiler = new Compiler(); compile ...

  7. Abp扩展之【配置功能】

    Abp的扩展功能非常强大,配合持久化可以很方便的配置系统.租户.用户的配置,关于ABP的配置请参考: http://www.cnblogs.com/farb/p/ABPSettingManagemen ...

  8. Linux 容器 vs 虚拟机 —— 谁更胜一筹

    自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手.本文将向您提供详细信息,以了解Linux容器和虚拟机之间的差异. Linux容器vs虚拟机 – 应用程序与操作系统 ...

  9. 42.Linux应用调试-初步制作系统调用(用户态->内核态)

    1首先来讲讲应用程序如何实现系统调用(用户态->内核态)? 我们以应用程序的write()函数为例: 1)首先用户态的write()函数会进入glibc库,里面会将write()转换为swi(S ...

  10. Ext表单验证

    //大家在很多的extjs代码中都看到了这两个,他们都起提示作用的Ext.QuickTips.init();//支持tips提示Ext.form.Field.prototype.msgTarget=' ...