C语言中的代码和平 - 静态问题

时间:2012-05-07 06:31:43

标签: c methods static

如何在C ??

中编写这种代码
public static Encoding GetEncoding (
    int codepage
)

3 个答案:

答案 0 :(得分:1)

C中没有公共。除非您明确地将它们标记为静态,否则函数默认具有外部链接。在使用它时,为您的函数(可能在头文件中)显示原型是个好主意,以避免调用者和现实之间的不匹配期望: - )

例如,以下内容将是有效的C:

encoding.h:
    typedef void * Encoding;
    Encoding getEncoding (int);

encoding.c:
    #include "encoding.h"
    Encoding getEncoding (int codePage) {
        return 0;
    }

如果您的目的是将C ++(或其他OO语言)代码转换为C,那么有一些方法可以实现,例如here,但它不适合胆小的人:-)特别是如果你是支持适当的OO概念,如继承和多态。

答案 1 :(得分:1)

C中没有正式方法,static修饰符意味着其他方法。也没有访问控制修饰符。所以:

Encoding *GetEncoding (int codepage) {

}   

在java中,返回值可能是对象引用,因此在C中你将使用*pointer

答案 2 :(得分:0)

在C中,没有访问控制,也没有this。因此,publicstatic已经是唯一的做法。

您可能希望标头(接口)文件包含原型

extern Encoding *GetEncoding ( int codepage );

和源(实现)文件应该

Encoding *GetEncoding ( int codepage ) {
    return & masterEncodingList[ codepage ]; /* example implementation */
}

头文件也可能定义Encoding

struct Encoding {
    const char *name;
    /* other fields */
};

,源文件可能会定义编码

Encoding masterEncodingList[] = {
    { "Swahili", /* other fields */ },
    { "Portuguese", /* ... */ },
    /* ... */
};

有啊,好玩!