【Cpp】考点·宏

一、#define的基本用法

1.#define命令剖析

1.1 #define的概念

#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。

(1)简单的宏定义


#define <宏名> <字符串>
#define PI 3.1415926

(2)带参数的宏定义


#define <宏名> (<参数表>) <宏体>
#define A(x) x

一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换。替换后才进行编译,宏替换是简单的替换。


 1 #include <iostream>
2
3 using namespace std;
4
5 #define product(x) x*x
6 int main()
7 {
8 int i = 3;
9 int j, k;
10 j = product(i++);
11 cout << "j= " << j << endl;
12 cout << "i= " << i << endl;
13 k = product (++i);
14 cout << "k= " << k << endl;
15 cout << "i= " << i << endl;
16 return 0;
17 }

可以看出,i第一次被输出为5是因为宏替换后i++执行了两次。

二、常用的一些宏定义

1.防止一个头文件被重复包含


#ifndef BODYDEF_H
#define BODYDEF_H
//头文件内容
#endif

时间: 2024-08-28 23:21:32

【Cpp】考点·宏的相关文章

VELT-0.1.5开发:在vs2013下调试Linux GUI程序

VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.net/detail/lights

Cocos2d-x之CCImage深入分析

Cocos2d-x之CCImage深入分析 [Cocos2d-x相关教程来源于红孩儿的游戏编程之路 CSDN博客地址:http://blog.csdn.net/honghaier] 红孩儿Cocos2d-X学习园地QQ群:249941957 加群写:Cocos2d-x 本节所用Cocos2d-x版本:cocos2d-2.0-x-2.0.2 CCImage类:支持从JPG,PNG,TIFF以及数据流,字符串中创建供Cocos2d-x进行访问的图片数据对象. 这是一个非常重要的类,因为它是你使用co

C++预处理详解

本文在参考ISO/IEC 14882:2003和cppreference.com的C++ Preprocessor的基础上,对C++预处理做一个全面的总结讲解.如果没有特殊说明,所列内容均依据C++98标准,而非特定平台相关(如VC++)的,C++11新增的特性会专门指出. 1. 简介 通常我们说C++的Build(这里没用"编译"是怕混淆)可分为4个步骤:预处理.编译.汇编.链接.预处理就是本文要详细说的宏替换.头文件包含等:编译是指对预处理后的代码进行语法和语义分析,最终得到汇编代

Makefile 递归遍历目录(含子目录) 编译动态库

这里推荐一本书,Makefile手册,本人正在学习,多交流~ 一.统一编译所有子目录的文件 直接上Makefile内容了, AR=arLD=ldCC=gcc CFLAGS = -O2 -Wall  -I./Test \                -I./Test/Test1 \ #注:"\"后面不能有空格,并且该句写完后最好有个换行 #注释部分推荐在单独的一行编写 #动态库需要 -fPIC  -shared SOFLAGS = -O2 -fPIC -sharedTARGET = .

MFC框架剖析和消息机制

即便是基于MFC的应用程序,建立窗口类也是会遵循如下的过程: 设计窗口类->注册窗口类->生成窗口->显示窗口->更新窗口->消息循环->消息路由到窗口过程函数处理.下面就剖析一下在MFC中是如何完成上述过程的. (1)每个应用程序都有且仅有一个应用类的全局变量theApp,全局变量先于WinMain函数进行处理. (2)WinMain函数体在APPMODUL.CPP文件中,定义如下: extern "C" int WINAPI _tWinMain(

C语言学习笔记(五) 预处理符号

关于预处理的"常识" 预处理并不是编译,也不是"预编译". 预处理并不是每个语言都有的. C/C++预处理仅仅是把源程序划分和整理成一个个的段(phase),并不进行编译. 预处理器在UNIX传统中通常缩写为PP,在自动构建脚本中C预处理器被缩写为CPP的宏指代.为了不造成歧义,C++(c-plus-plus) 经常并不是缩写为CPP,而改成CXX. C语言预处理符号 ANSI C标准要求支持的预处理符号包括: #define.#undef(宏定义), #inclu

【Cpp】考点·堆栈&amp;动态内存分配

动态内存分配 堆内存分配与释放 C/C++定义了四个内存区间:代码区,全局变量与静态变量区,局部变量区(栈区),动态内存区(堆区) 通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间.这种内存分配称为静态存储分配.有些操作对象只在程序运行时才确定,这样编译时无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配.所有动态存储分配都在堆区中进行. 当程序运行到需要一

【Cpp】考点·函数重载

一.什么是函数重载 函数重载(overloaded)是指,在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数.这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处. 举个栗子 1 #include<iostream> 2 using namespace std; 3 4 void print(int i) 5 { 6 cout << "print a integer: &qu

【Cpp】考点·引用

一.引用 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名 = 目标变量名: int a; int &ra = a; (1)&在此不是求地址运算,而是起标识符作用. (2)类型标识符是指把目标变量的类型. (3)声明引用时,必须同时对其进行初始化. (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名.且不能再把该引用名作为其他变量名的别名. (5)生命一个引用,不是定义了一个新变量,它只表示该引用