【2013.1.25】 为什么C#不支持宏命令
来源:互联网 发布:孟克鞋搭配 知乎 编辑:程序博客网 时间:2024/06/05 02:47
这是今天上午我在MonoDeveloper中尝试使用#define时注意到的问题:
C#貌似并不支持#define宏命令。
这是为什么呢?
在这篇文章里,我找到了答案。
于是将它翻译一遍,
希望能帮助跟我一样对此有困惑的朋友。
在C++中,我们可以这样定义一个宏命令:
#define PRODUCT(x,y,z) x*y*z
然后就可以这样写了:
int a = PRODUCT(3,2,1);
但是C#中并不可以这样做。为什么呢?
有很多原因,最重要的一点是可读性。
使用C#进行设计的一个最主要的目标是保持代码可读。但是通过使用宏命令,程序员可以创建他们自己的语言——
但是这与代码本身并没有太大关联。为了理解代码在干什么,用户不只需要知道语言是怎样工作的,同样也需要知道#define宏命令的具体含义。这大大降低了代码的可读性。
在C#中,你完全可以使用方法来代替宏命令。——并且无需担心它们的运行效率,因为JIT(即时编译器)会帮你搞定这一切,
让你用的放心,舒心与安心。
除此之外,还有一点细节方面的问题。
因为宏定义是使用文字义的,这意味着如果我这样写:
int y = PRODUCT(1 + 2,3 + 4,5 + 6);
我想得到的是3*7*11 = 231,但是事实上,
宏定义这个笨孩子只是简单的将这句语句理解成了这个样子:
int y = 1 + 2*3 + 4*5 + 6;
你猜结果是多少?32!哦,不对,我算错了:-P,是33!!!
当然,可以使用括号来避免这个问题,但是程序员总有犯大姨妈的时候,一不小心就会掉进这个笨孩子的陷阱里了。
(剩余部分是C#中有关条件编译的一些符号,
在这里就不赘述了,
如果感兴趣的话猛戳这里)
Translated by Elezor in Tianjin.
2013/1/25
- 【2013.1.25】 为什么C#不支持宏命令
- 为什么LPC1788不支持Linux
- 为什么CSDN不支持转载
- Tomcat为什么不支持EJB
- 为什么Kindle不支持epub?
- 为什么FireFox 不支持CSS滤镜?
- chrome为什么不支持网银
- 为什么Java不支持多重继承
- java为什么不支持多继承
- 为什么Java不支持多重继承?
- Java为什么不支持多继承
- 为什么Java不支持多继承
- Java为什么不支持多继承
- java为什么不支持多继承
- 为什么Java不支持多继承?
- 为什么 Python 不支持函数重载?
- 为什么`forward_list`不支持`push_back`操作?
- 为什么border-width不支持百分比
- sys文件系统下的接口函数
- Tomcat Too many open files
- java MessageFormat
- MSYS环境下编译VLC
- render yuv on ios
- 【2013.1.25】 为什么C#不支持宏命令
- shell 不转义
- 最近项目中用hibernate分页查询的底层方法
- Widget组件及设计介绍
- activiti学习资料
- 从request获取各种路径总结
- 黑马程序员——张孝祥Java基础加强笔记
- 使用curl 和 libjson 完成联网和数据解析
- 快递投诉