C - 私有函数声明 GCC 与 MSVC



我不是C程序员,我正在尝试将补丁应用于使用MSVC编译良好的项目,但是为*nix提供了补丁。当我尝试用nmake编译修补的项目时,出现此错误:

error C2054: expected '(' to follow '__private'

引发此错误的代码如下:

private drawlist *
drawlist_append(p2mem *mem, drawlist_head *head)
{
    drawlist *d = p2mem_alloc(mem, sizeof(drawlist));
    if (!d) return 0;
    memset(d, 0, sizeof(drawlist));
    d->color = gx_no_color_index;
    d->next = 0;
    d->prev = head->last;
    head->last = d;
    (d->prev) ? (d->prev->next = d) : (head->first = d);
    return d;
}

通过谷歌搜索,我怀疑MSVC不接受这种声明,但我不知道如何更改代码,因为如前所述,我不是C/C++程序员。任何人都可以协助如何更改此private函数调用,使其对 MSVC 有效?

如果drawlist_append是在class内声明的成员函数,你可以试试:

private:
drawlist* drawlist_append(p2mem *mem, drawlist_head *head)

如果drawlist_append是一个独立的功能,你只需删除private,你可以试试这个:

drawlist* drawlist_append(p2mem *mem, drawlist_head *head)

另一种可能性是补丁提供者的意思是static而不是private。您可以尝试为 *nix C 添加以下宏:

#define private static
C++声明

中需要这样做

private:
 drawlist * drawlist_append(p2mem *mem, drawlist_head *head) { ..... }

private之后的一切都是私密的。

C 没有诸如privatepublic等概念。

此代码依赖于以下内容:

#ifndef private
# define private static
#endif

不幸的是,Microsoft的编译器已经进行了扩展。

我建议你添加

#ifdef private
#undef private
#endif
#define private static

到文件的顶部,或者只是将"私有"替换为"静态"。

最新更新