C 头文件中具有相同名称的宏和函数

C 头文件中具有相同名称的宏和函数,c,macros,C,Macros,tool.c #include <stdlib.h> #include "tool.h" void safeFree(void** pp) { if (pp != NULL & *pp != NULL) { free(*pp); *pp = NULL; } } 我想在导入main.c中的tool.h后使用宏,但程序无法编译。有没有办法用相同的名称定义宏和函数 有没有办法用相同的名称定义宏和函数 不在同一个编译单元中 此外,

tool.c

#include <stdlib.h>

#include "tool.h"

void safeFree(void** pp) {
    if (pp != NULL & *pp != NULL) {
        free(*pp);
        *pp = NULL;
    }
}
我想在导入
main.c
中的
tool.h
后使用宏,但程序无法编译。有没有办法用相同的名称定义宏和函数

有没有办法用相同的名称定义宏和函数

不在同一个编译单元中

此外,这不是一个好的做法不要这样做。如果宏将成为使用该功能的主要方法,请将该功能定义为其他功能。例如

void safeFreeImpl(void** pp);
#define safeFree(p) safeFreeImpl((void**)&(p))

相应地更改
tool.c

思考宏替换的工作原理,然后重新考虑您实际需要的内容。您了解“宏”是什么吗?它是对预处理器的一个命令,用于用指定的替换文本替换所有出现的
safeFree
。你认为这怎么行?这行不通;为什么不把宏名大写?或者甚至是看起来更好的,直接调用函数。这是其他问题的重复——尽管可能需要时间才能找到一个。简而言之,您应该使用
void(safeFree)(void**pp){…}
来实现该函数。强制转换有潜在的危险,因为宏很乐意接受每种类型的整数或指针参数。
void safeFreeImpl(void** pp);
#define safeFree(p) safeFreeImpl((void**)&(p))