根据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();
原文地址:https://www.jb51.cc/c/116413.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。