#define是否等同于函数?

Dom*_*mra 1 c

当你看到如下行:

#define IX(i,j) ((i)+(N+2)*(j))
Run Code Online (Sandbox Code Playgroud)

相当于:

int IX(int i, int j) {

    return ((i)+(N+2)*(j));

}
Run Code Online (Sandbox Code Playgroud)

你怎么知道返回类型等?

Joe*_*ein 6

编译器永远不会看到宏 - 预处理器替换文本.

所以,当你写:

result = IX(5, 3);
Run Code Online (Sandbox Code Playgroud)

编译器会看到:

result = ((5)+(N+2)*(3));
Run Code Online (Sandbox Code Playgroud)

这可能会对行为产生影响,但这取决于您的宏.在这种情况下,没有那么多(也有性能和调试差异,但我们不要在这里担心它们).

例如,你曾经像这样定义了你的宏(注意i变量的第二次使用)

#define IX(i,j) ((i)+(i+2)*(j))
Run Code Online (Sandbox Code Playgroud)

并称之为:

result = IX(++i, j);
Run Code Online (Sandbox Code Playgroud)

那么宏和函数会有不同的行为.