zoukankan      html  css  js  c++  java
  • 宏子程序在使用上的限制

      通常认为,用宏来代替函数调用的做法具有风险,而且不易理解——这是一种很糟糕的编程实践——因此,除非必要,否则还是应该避免使用这种技术。

      用给子程序命名的方法来给展开后代码形同子程序的宏命名,以便在需要时可以用子程序来替换宏  C++语言中给宏命名的方式是全部使用大写字母。如果能用子程序来代替宏,那在给宏命名的时候就应该采用给子程序命名的规则。这样当你想用子程序代替宏的时候,除了需要修改相关的子程序之外,无需做任何其他改动,反之亦然。 

      遵循这一建议也会带来一些风险。如果你常常利用到++和--运算符的副作用(side effects)(作为其他语句的一部分),那么当你误把宏当做子程序使用时就会遇上麻烦。考虑到副作用还可能引发其他问题,这也可以成为避免使用副作用的另一个原因。

      Limitations on the Use of Macro Routines

      宏子程序在使用上的限制

      像C++这样的现代编程语言都提供了大量可以取代宏的方案:

    ■           const可以用于定义常量

    ■           inline可以用于定义可被编译为内嵌的代码(inline code)的函数

    ■           template可以用于以类型安全的方式定义各种标准操作,如min、max等

    ■           enum可以用于定义枚举类型

    ■           typedef可以用于定义简单的类型替换

      正如C++的设计师Bjarne Stroustrup所指出的,“几乎每个宏都表明在编程语言、程序或程序员身上存在问题……当你使用宏的时候,就甭指望调试器、交叉引用工具和剖测 器(profiler)等工具能好好工作。”(Stroustrup 1997)。宏对于支持条件编译——见第8.6节“调试辅助工具”——非常有用,但对于细心的程序员来说,除非万不得已,否则是不会用宏来代替子程序的。

     

    --------------------------------------------------

    《代码大全第二版》2006年…………7.7宏子程序和内联子程序

  • 相关阅读:
    第二十二篇、服务器返回的数据转成模型
    第二十一篇、广告轮播器(支持循环滚动)
    【转】android应用程序的安装方式与原理
    【转】Android中处理崩溃异常
    android在Data目录内置可删除的APP
    Ubuntu下修改system.img 解包system.img、打包system.img
    Android studio打包APK混淆配置
    Android获取焦点所在控件
    Android根据APP包名启动应用
    Android自动更新安装后显示‘完成’‘打开’按钮
  • 原文地址:https://www.cnblogs.com/forlove/p/2243677.html
Copyright © 2011-2022 走看看