自己动手实现TODO的宏

自己动手实现TODO的宏

//转成字符串

#define STRINGIFY(S) #S

// 需要解两次才解开的宏

#define DEFER_STRINGIFY(S) STRINGIFY(S)

#define PRAGMA_MESSAGE(MSG) _Pragma(STRINGIFY(message(MSG)))

// 为warning增加更多信息

#define FORMATTED_MESSAGE(MSG)"[TODO-" DEFER_STRINGIFY(__COUNTER__)"]
" MSG" \n" DEFER_STRINGIFY(__FILE__)"
line " DEFER_STRINGIFY(__LINE__)

// 使宏前面可以加@

#define KEYWORDIFY try {} @catch (...) {}

// 最终使用的宏

#define TODO(MSG) KEYWORDIFY PRAGMA_MESSAGE(FORMATTED_MESSAGE(MSG))

使用:

@TODO("待解决");

源地址

时间: 2024-11-08 23:05:36

自己动手实现TODO的宏的相关文章

Samurai Framework 学习笔记--samurai中的宏魔法(待更新)

Samurai Framework 学习笔记–samurai中的宏魔法 文件 Samurai_Predefine.h Samurai里的一些预设宏 // 这3个宏是在定义属性 @prop_assign( NSInteger, page IN)的时候标记这个数据流的方向时用的. #define IN #define OUT #define INOUT // 函数属性限定符: __attribute__((unused)) 这个限定符属性禁止编译器在未引用该函数时生成警告 // 这里先用__unus

如何在C++中获得完整的类型名称

地球人都知道C++里有一个typeid操作符可以用来获取一个类型/表达式的名称: std::cout << typeid(int).name() << std::endl; 但是这个name()的返回值是取决于编译器的,在vc和gcc中打印出来的结果如下: int // vc i // gcc 一个稍微长一点的类型名称,比如: class Foo {}; std::cout << typeid(Foo*[10]).name() << std::endl; 打

代码备忘, TODO宏实现

代码备忘, TODO宏实现 我们平时在开发过程中, 往往并不是憋足气一股脑敲完全部代码.每个模块, 每个函数的实现总有个先后顺序.又或者哪个部分需要做调整, 修改- 所以, 我们需要有一个东西, 来提醒我们, 起到代码备忘功能, 避免某个功能忘记实现, 也能让我们快速定位. 所以这篇文章, 就是要实现一个TODO宏, 来达到代码备忘功能. 效果如下: 下面来分析下如何实现这个宏 在实现TODO之前, 已经自带了几个预处理指令来实现报警/报错: #warning Colin #error Coli

动手小达人宏旺半导体告诉你废旧手机里的eMMC芯片如何重新利用

eMMC(Embedded Multi Media Card)是嵌入式多媒体卡的简称,具有数据传输速度快.性能稳定.接口定义一致等优点,大量用于新型智能手机.电脑.等智能设备中.在EMMC的接口协议中有个非常特别的设定,它可以向下兼容SD卡的接口协议,这为EMMC魔改U盘打下了基础.随着5G手机的到来,手机更新换代也将越来越快,现在谁家里还没有几个被淘汰的旧手机,难道真的要拿去换一个盆回来不?[笑哭]旧手机.坏手机对于专业人士来说它们的价值很大,手机的零部件对特定的人用处还是蛮大的,其实对于我们

自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)

很多高端机械键盘,支持宏定义,例如我们可以设置"D"键为"dota",这样当我们按一下宏开启键,再按一下"D"键,就等价于分别按了"d" "o" "t" "a"四个键.这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X.另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了. 那么问题来了.. 山里来的买不起机械键盘的穷B同时又是程序

宏------进阶

宏定义的黑魔法 - 宏菜鸟起飞手册 宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那

动手动脑 自信成就人生之课后作业

?动手动脑一 请看以下代码: 上述代码可以顺利通过编译,并且输出一个“很奇怪”的结果: Ljava.lang.Object;@ba8a1dc 为什么会这样? 解释:java的object数组不能转化成string数组,在转换出错时,首先要观察被转换的对象原来是什么类型,或解开多层的包装,直到获取对象的最终类型,然后把不能再分解的类型转换成自己目标类型的对象...(稍微能理解) ?动手动脑二 随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中.

JAVA09异常处理之动手动脑问题

动手动脑1:为什么不管是否有异常发生,finally语句块中的语句始终保证被执行? 我们在写代码时,如果finally块中的代码过多会导致字节码条数"膨胀",因为finally中的字节码会被"复制"到try块和所有的catch块中.finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行. 动手动脑2:CatchWho.java,写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-ca

动手动脑,无法自拔(3)课时作业6

1.动手动脑(五子棋棋盘排布) (1)源程序 1 import java.io.*; 2 3 public class QiPan 4 { 5 //定义一个二维数组来充当棋盘 6 private String[][] board; 7 //定义棋盘的大小(宏定义) 8 private static int BOARD_SIZE = 15; 9 10 //初始化棋盘 11 public void initBoard() 12 { 13 //初始化棋盘数组 14 board = new String