C 中类函数宏中的警告

问题描述 投票:0回答:1

如果我有一个类似函数的宏,它调用一个函数...... 例如,

功能:

int sum(int num1, int num2)
{
    return num1 + num2;
}

类似函数的宏:

#define GET_SUM(n1, n2) sum((n0), (n2))

在这里,在宏参数中我有

n1
,但传递了一个不同的参数
n0
,该参数不存在。

在这种情况下我没有收到任何错误或警告?我应该将警告标志传递给编译器以获得错误/警告吗?顺便说一句,我正在使用 gcc。

尝试过一些警告标志,例如

-Wall -Wextra -Wstrict-prototypes

c macros warnings
1个回答
3
投票

宏只是文本(标记)替换;作为扩展的一部分,不执行任何语法或语义检查。如果你写

x = GET_SUM(i++, j++);

该代码将扩展为

x = sum((n0), (j++);

如果范围内没有

n0
或者类型错误,您应该在翻译过程中得到诊断。但就扩展本身而言,预处理器并不关心。

© www.soinside.com 2019 - 2024. All rights reserved.