宏定义命令:#define

不带参数的宏

格式:#define 宏名 替换文本

#undef指令:该指令用于取消已定义的宏(#define指令)。

带参数的宏

宏定义格式:#define 宏名(形参表) 替换文本

调用格式:宏名(实参表)

为了使宏调用的替换结果与一般预期一致,应当将宏定义中的每个形参以及整个替换文本分别用圆括号括起来。

文件包含命令:#include

格式1:#include <文件名>

格式2:#include "文件名"

被包含的文件拓展名一般为h(代表头文件),也可以是扩展名为c的源程序文件。

“尖括号”include命令:只在系统指定的目录中查找被包含文件。

“双引号”include命令:首先在当前目录中查找被包含文件;若找不到,再到系统指定目录中去查找。

“尖括号”格式:适用于系统定义的头文件;“双引号”格式:适用于用户自定义的包含文件。

条件编译

#if指令

格式: #if 条件表达式1 程序段1 [#elif 条件表达式2 程序段2] [#else 程序段3] #endif

功能:若条件表达式1的值非0(为真),则对程序段1进行编译;否则,判断条件表达式2,为真对程序段2进行编译,为假对程序段3进行编译。

条件表达式可以用“小括号”括起来。

#include <iostream> using namespace std; int main(void) { #if _WIN32 cout << "Windows" << endl; #elif __linux__ cout << "Linux" << endl; #endif #if (_WIN64) // 可以使用小括号 cout << "Windows64" << endl; #endif #if _WIN32 || _WIN64 // 可以使用逻辑运算符 cout << "Win ... " << endl; #endif #if !(_WIN32 || _WIN64) // 不是windows cout << "not Win ... " << endl; #elif !(__linux__) cout << "not LINUX ... " << endl; #endif return 0; }

#ifdef命令

格式: #ifdef 标识符1 程序段1 [#elif 标识符2 程序段2] [#else 程序段3] #endif

功能:若宏名(标识符)已经用#define定义过,则对程序段1进行编译;否则,如果标识符2定义过,则对程序段2进行编译,标识符2未定义,则对程序段3进行编译。

不可以使用“小括号”。

#include <iostream> using namespace std; int main(void) { #ifdef _WIN32 cout << "Windows..." << endl; #elif __linux__ cout << "Linux..." << endl; #endif return 0; }

#ifndef指令

格式: #ifndef 标识符1 程序段1 [#elif 标识符2 程序段2] [#else 程序段3] #endif

功能:若宏名(标识符)未用#define定义过,则对程序段1进行编译;否则,如果标识符2定义过,则对程序段2进行编译,标识符2未定义,则对程序段3进行编译。

不可以使用“小括号”。

#include <iostream> using namespace std; int main(void) { #ifndef _WIN64 cout << "not Win64 ... " << endl; #elif !__linux__ cout << "not linux ... " << endl; #endif return 0; }

------ 2023-6-22 星期四 14:18:00 ------

------ 2024-1-20 星期六 12:48:45 增加示例代码------