尝试在宏中表达指向类型的指针时遇到了问题。

举这个简单的例子。

#define INDEX_OF_DATA(data, type, index) \
    ((type *)data)[index]

这有效:
INDEX_OF_DATA(buffer, float, 3);

失败的地方:
INDEX_OF_DATA(buffer, float[2], 3);

因为强制类型转换应为(float(*)[2])

有没有一种方法可以在不使用type的情况下表达“typeof的指针”? (不是标准C)。

注意,当然还有其他方法可以使此特定示例正常工作。例如,强制转换为char并由sizeof(type) * index偏移。但是我对用C表示pointer to type的方式很感兴趣。

最佳答案

使用C类型执行非常复杂的工作可能是一项有趣的工作,但在实际代码中却极为困惑。

为了避免过多地破坏复杂的指针表达式,人们经常使用typedef!

如果您对自己的宏使用typedef期望使用的所有类型,则不会有任何问题。观察:

#include <stdlib.h>

#define INDEX_OF_DATA(data, type, index) \
    ((type *)data)[index]


int main(void) {
    float (*buffer)[2] = malloc(4 * sizeof(float[2]));

    typedef float t_f2arr[2];

    INDEX_OF_DATA(buffer, t_f2arr, 3)[0] = 1.1f;

    return 0;
}

这正是您想要的!

关于c - 在宏C中键入的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30565405/

10-12 21:33