如果我有一个类似函数的宏,它调用一个函数...... 例如,
功能:
int sum(int num1, int num2)
{
return num1 + num2;
}
类似函数的宏:
#define GET_SUM(n1, n2) sum((n0), (n2))
在这里,在宏参数中我有
n1
,但传递了一个不同的参数 n0
,该参数不存在。
在这种情况下我没有收到任何错误或警告?我应该将警告标志传递给编译器以获得错误/警告吗?顺便说一句,我正在使用 gcc。
尝试过一些警告标志,例如
-Wall -Wextra -Wstrict-prototypes
宏只是文本(标记)替换;作为扩展的一部分,不执行任何语法或语义检查。如果你写
x = GET_SUM(i++, j++);
该代码将扩展为
x = sum((n0), (j++);
如果范围内没有
n0
或者类型错误,您应该在翻译过程中得到诊断。但就扩展本身而言,预处理器并不关心。