相关疑难解决方法(0)

拒绝指针的数组大小的宏

经常教授的标准数组大小的宏是

#define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
Run Code Online (Sandbox Code Playgroud)

或一些等效的形成.然而,当传入指针时,这种事情会默默地成功,并且在运行时看起来似乎有道理,直到事情神秘地分崩离析.

犯这个错误太容易了:一个具有局部数组变量的函数被重构,将一些数组操作移动到一个以数组作为参数调用的新函数中.

所以,问题是:是否有一个"卫生"宏来检测ARRAYSIZEC中宏的滥用,最好是在编译时?在C++中,我们只使用专门用于数组参数的模板; 在C中,似乎我们需要一些方法来区分数组和指针.(例如,如果我想拒绝数组,我只是(arr=arr, ...)因为数组赋值是非法的).

c arrays macros c-preprocessor

49
推荐指数
4
解决办法
1万
查看次数

在编译时在c/c ++预处理宏中验证参数是ARRAY类型

有没有办法在ac宏的编译时验证参数是一个数组?

例如在这两个宏中:

#define CLEAN_ARRAY(arr) \
    do { \
        bzero(arr, sizeof(arr)); \
    } while (0)
Run Code Online (Sandbox Code Playgroud)

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
Run Code Online (Sandbox Code Playgroud)

我尝试使用CTC(X),但无法找到任何方法来验证/警告是否arr不是一个数组.

c c++ gcc compiler-errors

4
推荐指数
3
解决办法
1717
查看次数

标签 统计

c ×2

arrays ×1

c++ ×1

c-preprocessor ×1

compiler-errors ×1

gcc ×1

macros ×1