《学习ROS机器人编程》第二版
8.5预处理器的特点前面我说过,我们几乎总是希望使用内联函数代替预处理器宏。然而,当在标准C预处理器(通过继承也是C++预处理器)里使用3个特别的特征时却是例外:字符串定义、字符串串联和标志粘贴。字符串定义的完成是用#
指示,它容许设一个标识符并把它转化为字符串,然而字符串串联发生在当两个相邻的字符串没有分隔符时,在这种情况下字符串组合在一起。在写调试代码时,这两个特征是非常有效的。
例如:
#define DEBUG(X) cout << #X " = " << X << endl
上面的这个定义可以打印任何变量的值。我们也可以得到一个跟踪信息,在此信息里打印出它们执行的语句。
#define TRACE(S) cout << #S << endl; S
#S
定义了要输出的语句。第二个S
重申了语句,所以这个语句被执行。当然,这可能会产生问题,尤其是在一行for
循环中。
for (int i = 0 ; i < 100 ; i++ ) TRACE(f(i)) ;
因为在TRACE()
宏里实际上有两个语句,所以一行for
循环只执行第一个。解决方法是在宏中用逗号代替分号。标志粘贴在写代码时是非常有用的。它让我们设两个标识符并把它们粘贴在一起自动产生一个新的标识符。例如:每次调用FIELD()
宏,将产生一个保存字符串的标识符和另一个保存字符串长度的标识符。
如果你对字符串定义感兴趣,不妨看看Python字符串定义,或者了解一下javascript中字符串的定义示例代码。这些资源将帮助你更好地理解字符串在不同编程语言中的使用方式。
需要更多关于字符串处理的帮助吗?看看自定义字符串和Ruby Unicode字符串调试帮助,这些资源将为你提供更多实用的信息和技巧!
如果你还好奇如何在C/C++中进行字符串排序、粘贴与转型,可以参考这篇文章,相信会对你有所启发!
用户评论