C++ 宏的几个基本用法

变量定义

#define PI 3.1415926
直接展开作为变量

条件编译

#if, #elif, #else, #endif用于条件编译: 在编译时期执行
#if 常量表达式1
语句…
#elif 常量表达式2
语句…
#elif 常量表达式3
语句…

#else
语句…
#endif

预定义

#ifdef, #ifndef, defined.
它们经常用于避免头文件的重复引用:
#ifndef FILE_H
#define FILE_H
#include “file.h”
#endif
另外 #define Test
#ifdef Test
// 测试输出
#endif

C内置预定义宏

LINE 当前语句所在的行号, 以10进制整数标注.
FILE 当前源文件的文件名, 以字符串常量标注.
DATE 程序被编译的日期, 以"Mmm dd yyyy"格式的字符串标注.
TIME 程序被编译的时间, 以"hh:mm:ss"格式的字符串标注, 该时间由asctime返回.
STDC 如果当前编译器符合ISO标准, 那么该宏的值为1
STDC_VERSION 如果当前编译器符合C89, 那么它被定义为199409L, 如果符合C99, 那么被定义为199901L.
我用gcc, 如果不指定-std=c99, 其他情况都给出__STDC_VERSION__未定义的错误信息, 咋回事呢?
STDC_HOSTED 如果当前系统是"本地系统(hosted)", 那么它被定义为1. 本地系统表示当前系统拥有完整的标准C库.

常用的预处理命令

#define 定义一个预处理宏
#undef 取消宏的定义
#include 包含文件命令
#include_next 与#include相似, 但它有着特殊的用途
#if 编译预处理中的条件命令, 相当于C语法中的if语句
#ifdef 判断某个宏是否被定义, 若已定义, 执行随后的语句
#ifndef 与#ifdef相反, 判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined 与#if, #elif配合使用, 判断某个宏是否被定义
#line 标志该语句所在的行号
# 将宏参数替代为以参数值为内容的字符窜常量
## 将两个相邻的标记(token)连接为一个单独的标记
#pragma 说明编译器信息
#warning 显示编译警告信息
#error 显示编译错误信息

你可能感兴趣的:(基础知识,C++)