我遇到了一个C++代码,其中在文件的标题部分中定义了一个函数,如下所示

#define APPEND_VALUE(X, Y, I)\
{\
  int idx = (Y*100+X);\
  int idxn = idx + ValueCount[idx];\
  TempVector[idxn] = I;\
  CountVector[idx] += 1;\
}

(请注意,这并不是全部代码,并且TempVector和CountVector在其他地方定义)

稍后,代码APPEND_VALUE的用法与其他任何函数一样。我想知道上面的(#define APPEND_VALUE)代码和下面的代码有什么区别
void APPEND_VALUE(int X, int Y, int I)
{
  int idx = (Y*100+X);
  int idxn = idx + ValueCount[idx];
  TempVector[idxn] = I;
  CountVector[idx] += 1;
}

与另一种相比,使用一种有什么优势?还有一个技术名称,用于定义一个函数,如第一个代码中所示(使用#define的代码所示)。

最佳答案

#define是称为“预处理器”的一部分。本质上,这是在编译C文档之前要处理的代码。大多数预处理器代码都在扩展名为“.h”的文件中(这就是为什么在导入库时可能会看到的原因)。

预处理器语言是原始的。例如,如果执行“缺少括号的文本替换”,则预处理器函数的结果可能不是您要返回的结果(贷方:@Deduplicator)。以示例为例:#define Square(x) (x*(x))。由于这个原因,以及其他许多原因,我希望在可能的情况下使用常规C语言对其进行编码(请注意,在许多情况下,预处理器可能会更快,更有用)。希望这可以帮助!

09-25 17:01
查看更多