预处理器宏没有替换C

根据cplusplus.com,定义宏的语法是:
#define identifier replacement

但是,我有时会偶然发现一个不包含替换的宏定义.例如,在afxwin.h中,有以下预处理器定义:

#define afx_msg         // intentional placeholder

我的问题:

>在使用没有替换的预处理器定义时,在编译时会发生什么?它被忽略了吗?例如,行afx_msg是否为OnAddButton();变得无效OnAddButton();?
>没有替换使用预处理器的目的是什么?是否只是为了使代码更清晰?

解决方法

nothing”(无文本)是宏的有效替换文本.它将被预处理器简单地删除(更确切地说,由任何东西替换).

你使用这样的东西有很多原因.一种是简单地在#ifdef和类似的构造函数中使用宏.

另一种是条件编译.典型的用例是公共API和DLL导出.在Windows上,您需要将函数标记为从DLL(构建DLL时)或从DLL导入时(在链接DLL时)导出的函数.在ELF系统上,不需要这样的声明.因此,您经常会在公共库头文件中看到这样的代码

#ifdef _WIN32
  #ifdef BUILDING_MYLIB
     #define MYLIB_API __declspec(dllexport)
  #else
     #define MYLIB_API __declspec(dllimport)
  #endif
#else
  #define MYLIB_API
#endif

void MYLIB_API myApiFunction();

一个原因可能是代码处理工具.也许你有一个解析源代码的工具,用一个标记提取一个函数列表.您可以将此标记定义为空宏.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...