本篇内容主要讲解“C++为什么不要使用宏进行程序中的文本操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++为什么不要使用宏进行程序中的文本操作”吧!
在静海等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、做网站 网站设计制作按需求定制设计,公司网站建设,企业网站建设,品牌网站建设,营销型网站建设,外贸网站建设,静海网站建设费用合理。
ES.30: 不要使用宏进行程序中的文本操作
Reason(原因)
宏是错误的主要来源之一。宏不会遵守通常的范围和类型准则。宏可以为人提供一个和编译器视角有些不同的视角。宏让工具构建变得更复杂。
Example, bad(反面示例)
#define Case break; case /* BAD */
This innocuous-looking macro makes a single lower case c instead of a C into a bad flow-control bug.
这个看起来无害的宏在将大写C替换为小写c时引入了程序流控制错误。
Note(注意)
This rule does not ban the use of macros for "configuration control" use in #ifdefs, etc.
本准则没有禁止使用宏(如#ifdef等)进行配置控制。
In the future, modules are likely to eliminate the need for macros in configuration control.
将来,模块功能应该可以消除宏在配置控制方面的用途。
Note(注意)
本规则也不鼓励使用#和##进行字符串的转换和链接。一般来讲,很多情况下使用宏都是基本无害的,但是即使是这样也会为工具带来困难,例如有些自动补全软件,静态分析软件和调试器等。通常使用花哨的宏定义是过于复杂的设计的信号。#和##也会鼓励宏的定义和使用。
#define CAT(a, b) a ## b
#define STRINGIFY(a) #a
void f(int x, int y)
{
string CAT(x, y) = "asdf"; // BAD: hard for tools to handle (and ugly)
string sx2 = STRINGIFY(x);
// ...
}
There are workarounds for low-level string manipulation using macros. For example:
确实存在需要使用宏定义进行底层字符串操作时可以使用一些变通,例如:
string s = "asdf" "lkjh"; // ordinary string literal concatenation
enum E { a, b };
template
constexpr const char* stringify()
{
switch (x) {
case a: return "a";
case b: return "b";
}
}
void f(int x, int y)
{
string sx = stringify();
// ...
}
This is not as convenient as a macro to define, but as easy to use, has zero overhead, and is typed and scoped.
这段代码不像定义宏那么容易,但同样方便使用,不存在额外的开销,并且包含类型和范围。
In the future, static reflection is likely to eliminate the last needs for the preprocessor for program text manipulation.
将来,静态反射机制应该可以消除在程序中处理文本时使用预处理器的最后一个需求。
Enforcement(实施建议)
Scream when you see a macro that isn't just used for source control (e.g., #ifdef)
当给你看到宏定义不是用于代码控制(例如#ifdef)时,一定要尖叫。
到此,相信大家对“C++为什么不要使用宏进行程序中的文本操作”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
当前标题:C++为什么不要使用宏进行程序中的文本操作
URL地址:http://lswzjz.com/article/jehgje.html