c++ - 使用#define 声明一个函数

标签 c++ function

我遇到了一个 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 语言对其进行编码(请注意,在许多情况下,预处理器可能更快、更有帮助)。希望这可以帮助!

关于c++ - 使用#define 声明一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51243773/

相关文章:

c++ - 在窗口窗体上绘制加载圆

c++ - 如何避免在 C++ 中使用非原始静态类变量出现问题?

.net - 不能在另一个项目的 dll 中使用一个类的 typedef

function - 如何获取 PostgreSQL 数据库中的函数列表及其参数?

javascript - 两个 jQuery 函数在一起时不起作用

c++ - Windows 限制中的共享内存 (c++)

azure - 如何从 AZURE 函数 API url 中删除 CODE 参数?

javascript - 在 console.log 中立即出现奇怪的行为错误

objective-c - 在 objective-c 中使用参数作为变量名

C++11。是否可以这样做 : string foo = cout << (. 00000023)*(.00000023) << endl; -精确