1

所以,我试图创建一个可读性很好的C函数原型,它返回一个字符串数组(即char*)。我能想到的最接近的是:

const char * const *entrypoints()
{
    static const char* arrays[] = {"test123", "test2"};
    return arrays;
}

但是,我不喜欢*声明中的两个 s,它看起来很吓人 :) ...但是我没有找到一种方法来强调函数正在返回一个字符串数组的事实...使用 [] in函数声明会导致有趣的编译错误(例如 'entrypoints' 声明为函数返回数组 forconst char* (entrypoints() [])或预期 unqualified-id 在 '[' token for const char[]* entrypoints()or之前const char*[] entrypoints()......是的,编译器在这两种情况下都是正确的),谷歌似乎对此没有答案......所以我在这里。

有没有办法以一种可读性很好的方式声明一个函数原型(这将在公共 API 中使用),它将返回一个 C 字符串数组。不是 C++。C. _ 普通的老C。如果没有,我将不得不坚持两星方法......即。char **. 并不是说这(晦涩难懂)很尴尬,但我想强调该函数返回一个字符串数组。C 喜欢字符串 :)

4

1 回答 1

2

我不喜欢*声明中的两个 s

我为您感到难过,但这就是您声明“指针数组”返回类型的方式。数组衰减为指向其第一个元素的指针,因此此声明是完成所需内容的唯一方法。

你可以做的是返回一个指向字符串数组的指针:

const char *(*fn())[2]
{
    static const char *arr[2] = {
        "foo",
        "bar"
    };
    return &arr;
}
于 2013-05-02T12:22:40.120 回答