当你看到如下行:
#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)
你怎么知道返回类型等?
编译器永远不会看到宏 - 预处理器替换文本.
所以,当你写:
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)
那么宏和函数会有不同的行为.