C语言中的宏定义

C语言中的宏定义也叫做预处理命令,预处理命令是C语言本身的组成部分,不能直接对它们进行编译。

1.基本概念;

1>预处理不是C语句,是在编译前进行的

2>预处理功能主要用于下3种情况:

Ø  宏定义

Ø  文件包含

Ø  条件编译

3>宏是在编译前进行的,程序不能直接对它们进行编译,由预处理程序先进行替换。

说明:

Ø  一个预处理命令占用一个单独的行,命令末尾不使用分号作为结束符。

Ø  宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,它只做字符替换,不分配内存空间。

2.不带参数的宏

1>用一个指定的标识符(即名字)来代替一个字符串,它的一般形式为

#define  标识符   字符串

Eg:

#define  MAX_NUM    100

它的作用是在本程序文件中使用指定的标识符MAX_NUM来替代  100这个字符串。

2>宏定义是用宏名代替一个字符串,也就是做简单的置换,不做正确性检查。(预编译时不做任何语法检查,只有在编译已被宏展开后的源程序时才会发现语法错误并报错)

3>宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行替换

4>#definde出现在A处,则宏名的有效范围为定义命令之后到本源文件之后到本源文件结尾。

5>可以通过#undef命令终止宏定义的作用域.

#define MAX_NUM  100;

Void  main()

{

…………………….               MAX_NUM的作用范围

………………….

};

#undedf  MAX_NUM

f()

{

………………………….

…………………………

}

说明:当解除宏定义时,只需要指出宏标识符而不必给出后面的字符串。

6>在进行宏定义时,可以引用已定义的宏名,可以层层置换(即宏可以嵌套)

#define  PI  3.141596

#define  R   3.0

#define  L   2*PI*R

#define  S   PI*R*R

7>对程序中使用双引号括起来的字符串,即使与宏名相同,也不进行置换。

eg;

printf(“L =%f\n,s=%f\n”,L,S);

在printf中双引号内的L不进行替换,双引号外的进行替换。

C程序设计语言--宏定义的更多相关文章

  1. C 语言宏定义

    C 语言宏定义1.例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; ...

  2. 将C语言宏定义数值转换成字符串!

    将C语言宏定义转换成字符串! 摘自:https://blog.csdn.net/happen23/article/details/50602667 2016年01月28日 19:15:47 六个九十度 ...

  3. MOOC 编译原理笔记(一):编译原理概述以及程序设计语言的定义

    编译原理概述 什么是编译程序 编译程序指:把某一种高级语言程序等价地转换成另一张低级语言程序(如汇编语言或机器代码)的程序. 高级语言程序-翻译->机器语言程序-运行->结果. 其中编译程 ...

  4. C语言 宏定义之可变参数

    可变参数宏定义 C99编译器标准允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏.可变参数宏就像下面这个样子: #define dbgprint(. ...

  5. C语言宏定义时#(井号)和##(双井号)的用法1

    #在英语里面叫做 pound 在C语言的宏定义中,一个#表示字符串化:两个#代表concatenate 举例如下: #include <iostream> void quit_comman ...

  6. C语言宏定义时#(井号)和##(双井号)的用法

    C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...

  7. c语言宏定义

    一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时 ...

  8. C语言宏定义相关

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

  9. 转:C语言宏定义时#(井号)和##(双井号)的用法

    转自:http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html#2678295 #在英语里面叫做 pound 在C语言的宏 ...

随机推荐

  1. [C#]递归遍历文件夹

    /// <summary> /// 递归获取文件夹目录下文件 /// </summary> /// <param name="pathName"> ...

  2. Nigix快速上手注意事项

    linux下,主要关于配置,包括主从,待续......

  3. jquery判断复选框是否选中

    jquery判断复选框是否被选中 $(function(){ $(document).on("click", ".checkbox",function(){ v ...

  4. C# 操作XML文件,用XML文件保存信息

    using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.IO ...

  5. Remove linked list elements | leetcode

    Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...

  6. python的random函数

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  7. 【HDU 3810】 Magina (01背包,优先队列优化,并查集)

    Magina Problem Description Magina, also known as Anti-Mage, is a very cool hero in DotA (Defense of ...

  8. [mock]10月11日

    第二次mock.出的题是,假设有一个地区不能使用7,都用之后的数字代替,比如8代表7,18代表16(中间有7和17).那么给出一个这个地区的数X,求普通地区的数Y.首先是找规律,发现其实就是找给出的数 ...

  9. RTSP

    相关博客: RTSP 很详细的英文文档 RTSP交互命令简介及过程参数描述   RTSP协议 http://blog.csdn.net/andyweike/article/details/621071 ...

  10. CSS六大选择器(注释css表里不能加注释!!)

    @charset "utf-8"; /* CSS Document */ <!--标签控制器--> body{ background-color:#F00} <! ...