首页 > 解决方案 > 关于#ifndef 和macro_function

问题描述

我已将编译器从 msvc 更改为 mingw,

宏功能:_countof未包含在 mingw <stblib.h> 或 <stdio.h> 中

#define _countof(array) (sizeof(array) / sizeof(array[0]))

也许它只适用于 msvc,

所以,我必须自己将定义添加到头文件中,

我不确定下面的代码:

#ifndef _countof(array)
#define _countof(array) (sizeof(array) / sizeof(array[0]))
#endif

看来这种写法并不常见。

标签: arrayscfunctionmacrosifndef

解决方案


下划线前缀表示它是专有的而不是 ISO 标准名称。

它是在中测试的宏名称#ifndef,所以只需:

#ifndef _countof
    #define _countof(array) (sizeof(array) / sizeof(array[0]))
#endif

虽然我个人更喜欢:

#if !defined _countof
    #define _countof(array) (sizeof(array) / sizeof(*array))
#endif

宏也只是一个宏。没有宏函数之类的东西,而是您可能会指代类似函数的宏,它是一个接受参数的宏,但即使如此,它们在语义上也与函数非常不同。


推荐阅读