代码备忘, TODO宏实现

代码备忘, TODO宏实现

我们平时在开发过程中, 往往并不是憋足气一股脑敲完全部代码。每个模块, 每个函数的实现总有个先后顺序。又或者哪个部分需要做调整, 修改… 所以, 我们需要有一个东西, 来提醒我们, 起到代码备忘功能, 避免某个功能忘记实现, 也能让我们快速定位。 所以这篇文章, 就是要实现一个TODO宏, 来达到代码备忘功能。

效果如下:

下面来分析下如何实现这个宏

在实现TODO之前, 已经自带了几个预处理指令来实现报警/报错:

message “Colin”#pragma GCC warning “Colin”#pragma GCC error “Colin”

效果如下:

既然有了, 那为什么还需要自己实现这个TODO宏呢?

好在C99提供了一个 _Pragma 运算符可以把部分#pragma指令字符串化, 如下:

#pragma message “Colin”// 等价于_Pragma(“message \”Colin\””) // 需要注意双引号的转义// 或_Pragma(“message(\”Colin\”)”) // 需要注意双引号的转义

利用这个特性,我们就可以将warning定义成宏:

#define MY_WARNING _Pragma(“message (\”警察临检, 男左女右!\”)”)- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.MY_WARNING}

效果如下:

到这里, 大体有那么一个感觉。 不过我们提示的内容, 是define的, 也就是写死固定的, 不太合适。

所以我们希望这个宏能接受入参, 让它正常显示到warning中。

这就涉及了一些宏的基本用法。

_Pragma(STRINGIFY(message(MSG)))

STRINGIFY(S) 将入参转化成字符串,省去了_Pragma中全串加转义字符的困扰。

效果如下:

这时,一个基本功能的TODO宏就完成了,下面向其中加入额外的信息:

_”[TODO-” DEFER_STRINGIFY(__COUNTER__) “] ” MSG ” \n” \DEFER_STRINGIFY(__FILE__) ” line ” DEFER_STRINGIFY(__LINE__)

其中涉及到的知识:

于是,使用FORMATTED_MESSAGE(MSG)宏就可以将带文件路径、序号、行数等信息加入到最终的warning中。

其实到这步已经OK了,为了让这个宏更加抢眼,还可以借鉴RAC,,把宏定义成前面加@的形式:

@catch (…) {}最终版本_”KEYWORDIFY try {} @catch (…) {}KEYWORDIFY PRAGMA_MESSAGE(FORMATTED_MESSAGE(MSG))References

https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html

轻轻的风,吹开你紧锁的眉头,

代码备忘, TODO宏实现

相关文章:

你感兴趣的文章:

标签云: