2

我在代码片段中定义指针数组时遇到问题const void *- Visual C++ 抱怨我尝试的任何组合:

void *call_func_cdecl(void *func, const void *const *args, int nargs);

void vlogprintf(const char *format, va_list va) {
    int nargs;
    void **args;

    args = malloc(...);

    args[0] = format;
    // fill the rest...

    call_func_cdecl((void*)logprintf, args, nargs);
    free(args);
}

正如你所知道freevoid *那样,数组本身不应该是常量,但它的元素应该是因为format是 aconst void *并且它是 的元素args

到目前为止,我尝试了这些:

  • const void **args

    到线warning C4090: 'function' : different 'const' qualifiersfree(args)

  • void const **args

    和上面一样

  • void *const *args

    到线error C2166: l-value specifies const objectargs[0] = format

  • void **const args

    和上面一样

4

2 回答 2

3

无法通过简单的 malloc 分配 const 指针数组。基本类型就是它们,如果你知道你在做什么,你可以(或多或少)安全地忽略这些错误。如果你想以“正确”的方式来做,你可以尝试这样的事情(代码没有实际使用顺序,只是随机片段):

struct constvoid {
 const void * ptr;
}

void *call_func_cdecl(void *func, struct constvoid *args, int nargs);

{
    struct constvoid* args = malloc(...);

    args[0].ptr = format;
    //fill the other

    call_func_cdecl((void*)logprintf, args, nargs);
    free(args);
}
于 2013-01-14T11:32:34.407 回答
2

这是对的:

void const** args

我觉得警告是一个错误。

于 2013-01-14T11:02:39.433 回答