#define
 
预处理器指令定义宏

语法

#define identifier body
#define identifier ( [ parameters ] ) body
#define identifier ( [ parameters , ] Variadic_Parameter... ) body

说明

#define允许声明基于文本的预处理器宏。一旦编译器看到#define,它将开始用body 替换更多的identifier .body 可能为空。扩展是递归完成的,直到没有更多的扩展,编译器可以继续分析生成的代码。#undef可以用于使编译器忘记#define.

Parameters 将define转换为类似函数的宏,允许将文本参数传递给宏。body 中的任何参数名称的出现将在扩展期间由给定的参数文本替换。可以使用# Stringize操作符将宏参数转换成字符串文字,## Concatenate操作符可用于将令牌合并在一起。

注意:在类似函数的宏声明中,identifier 之后应该是开始的括号((),之间不会有任何空格,否则编译器会将其视为body 的一部分。

定义是scoped ;它们只在它们定义的范围内可见。如果在模块级别定义,定义在整个模块中是可见的。如果在具有范围(SubFor..NextWhile..WendDo..LoopScope..End Scope等)的复合语句中定义了identifier ,则identifier 定义仅在该范围内可见。另一方面,命名空间对define的可见性没有任何影响。

可以使用#ifdef和其他人检查Identifier ,这些可用于从编译器中隐藏代码部分(条件编译)。

可以使用-pp编译器选项检查宏扩展的结果。

#define通常用于声明常量。Const语句是一种类型安全的替代方法。

例子

''定义和检查
#define DEBUGGING
#ifdef DEBUGGING
  '...声明
#endif

''简单的定义/文本替换
#define FALSE 0
#define TRUE (Not FALSE)

''类似功能的定义
#define MyRGB(R,G,B) (((R)Shl 16)  Or ((G)Shl 8) Or (B)) 
Print Hex( MyRGB(&hff, &h00, &hff) )

''行延续和定义中的语句
#define printval(bar) _
    Print #bar; "="; bar

''#define仅在定义范围内才可见
Scope
    #define LOCALDEF 1
End Scope

#ifndef LOCALDEF
#    Print LOCALDEF Is Not defined
#endif

''命名空间对define的可见性没有影响
Namespace foo
#    define NSDEF
End Namespace

#ifdef NSDEF
#    Print NSDEF Is defined
#endif


与QB差别

  • 新的FreeBASIC

参考