C程序设计语言--宏定义
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程序设计语言--宏定义的更多相关文章
- C 语言宏定义
C 语言宏定义1.例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; ...
- 将C语言宏定义数值转换成字符串!
将C语言宏定义转换成字符串! 摘自:https://blog.csdn.net/happen23/article/details/50602667 2016年01月28日 19:15:47 六个九十度 ...
- MOOC 编译原理笔记(一):编译原理概述以及程序设计语言的定义
编译原理概述 什么是编译程序 编译程序指:把某一种高级语言程序等价地转换成另一张低级语言程序(如汇编语言或机器代码)的程序. 高级语言程序-翻译->机器语言程序-运行->结果. 其中编译程 ...
- C语言 宏定义之可变参数
可变参数宏定义 C99编译器标准允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏.可变参数宏就像下面这个样子: #define dbgprint(. ...
- C语言宏定义时#(井号)和##(双井号)的用法1
#在英语里面叫做 pound 在C语言的宏定义中,一个#表示字符串化:两个#代表concatenate 举例如下: #include <iostream> void quit_comman ...
- C语言宏定义时#(井号)和##(双井号)的用法
C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...
- c语言宏定义
一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时 ...
- C语言宏定义相关
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义......1,防止一个头文件被重复包含#ifndef COMDEF_H# ...
- 转:C语言宏定义时#(井号)和##(双井号)的用法
转自:http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html#2678295 #在英语里面叫做 pound 在C语言的宏 ...
随机推荐
- alibaba的COBAR真是强大.
近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了),特此推荐给大家.Cobar是阿里巴巴研发的关系型数据 的分布式处理系统,该产品成功替代了原先基于Oracle ...
- HTML 5 video 视频标签全属性详解
Video标签的使用 Video标签含有src.poster.preload.autoplay.loop.controls.width.height等几个属性, 以及一个内部使用的标签<sour ...
- 十分钟了解MVVMLight
十分钟了解MVVMLight 前言: 最近看了看开源框架MVVMLight,一直想写一点笔记,但是文笔欠佳,索性就放弃了.那就来翻译一点文章吧. 由于英文水平和技术水平有限,凡是不妥之处,请大家指 ...
- tabbar - 取消系统渲染
/** 1. 取消自动渲染 - 图片***/ viewCon1.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_home_ ...
- 解决CocoaPods在OS X 10.11出现问题-b
最近把mac系统升级到10.11系统,但是在用pod install命令的时候,却提示command not found.后来上网查了下才知道,Cocoapods在10.11系统上发生了变化. 在st ...
- css实现网页布局随滚轮变化响应移动
_position:absolute; _top:expression(eval(document.documentElement.scrollTop)); 1.第一句代码 _position:abs ...
- my9.23(输入输出,写操作)
#include <iostream> #include <fstream> using namespace std; void write(int data,int len) ...
- python多线程 批量下补丁
一个一个下载 要2个多小时.就直接起了个线程池.效果明显.import urllib2 from urlparse import urlparse uri = 'http://******/patch ...
- poj 1284 Primitive Roots
从来没有接触过完全剩余系,不会证明,知道看了别人的题解才知道要用欧拉函数: 下面是证明过程: p是奇素数,如果{xi%p | 1 <= i <= p - 1} = {1,2,...,p-1 ...
- ubuntu修改grub2
转自修改系统启动项 grub2配置的方法 ubuntu 在早期的Ubuntu中,使用Grub作为系统的启动引导程序,想修改系统启动项非常简单,只要用gedit打开系统菜单设定文件( sudo gedi ...