有关选择的建议在函数和宏之间

大多数 Microsoft 运行库实例被编译或汇编的功能,但是,某些实例实现为宏。 在头文件中声明函数和实例时的宏版本中,宏定义优先,因为,在函数声明后应始终显示。 当您调用实现为函数和宏的实例时,可以通过两种方式强制编译器将使用函数版本:

  • 括号内的实例的名称。

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • “undefined”与 #undef 指令的宏定义:

    #include <ctype.h>
    #undef _toupper
    

如果您需要选择在功能和库 (dll) 例程的宏实现之间,请考虑以下权衡:

  • 速度与范围 使用宏的主要好处是更快的执行时间。 在预处理期间,宏展开 (由其定义替换) 内联,每次使用它。 函数定义只发生一次无论多少次调用。 宏可以提高代码大小,但没有开销与函数调用。

  • 函数求值 的函数计算结果为地址;宏不。 因此不能在需要指针的上下文中使用宏名。 例如,可以声明指向功能,但是,不是指针到宏。

  • 类型检查 ,在声明函数时,编译器可以检查参数类型。 由于不能声明宏,编译器无法检查宏参数类型;尽管它可以检查参数的数目传递给宏。

请参见

参考

CRT库功能