LOG_PRINTF 是我项目中的log 机制, 可以指定级别和开发者, 除此之外, 我还希望对每个 feature或功能点, 在log 时有一个统一的前辍, 根据DRY 原则, 我不希望在每个LOG 处手工写上这样的前辍, 而且也很难保证统一, 所以我在.cpp 文件范围内定义了个宏. 宏本身被定义为一个字符串, 这样可以利用C语言的一个特性: 连续的字符串常量在编译期被串接在一块. 用const char * const feature_prefix 也可达目标, 但就得用上面第二个框里的办法了, 这个办法不及宏的方案更优雅, 难怪Scott meyers说, 宏还不能完全退隐. 的确, 必要的时候还得请它出山.
上图中最后的注释是特别的, 特别给pc-lint 看的,
但是, 宏定义中不能指定一次性的临时 lint 选项 !e
上面 //lint -e1923 会对后续的处理都关掉这个警告. 不是我想要的.
文档中称的-save, -restore机制也不能生效.
经实验, 最好的办法是//lint -esym(1923, MY_NAME)
这一行可以紧挨着宏定义上面, 需要的文字量也更少. 用这个办法可以仅对 MY_NAME宏网开一面, 下面的MY_NAME_TOO 还是会被警告.