【问题标题】:Peace of code in C - static issue [closed]C中的代码和平-静态问题[关闭]
【发布时间】:2012-05-07 06:31:43
【问题描述】:

如何用C编写这种代码??

public static Encoding GetEncoding (
    int codepage
)

【问题讨论】:

  • 你不能在 C 中拥有对象,但你可以拥有指向数据 structures 的指针,并且一切都是公开的。顺便说一句,一切都是有效的static 你在考虑 C++ 吗?您是否尝试使用 JNI?

标签: c methods static


【解决方案1】:

C 中没有 public。默认情况下,函数具有外部链接,除非您明确将它们标记为静态。使用原型时最好让您的函数(可能在头文件中)可见,以避免调用者和现实之间的期望不匹配:-)

例如,以下是有效的 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 概念,例如继承和多态。

【讨论】:

  • 没错,但 C 中最接近 Java 的“public”关键字的是在头文件中声明函数。
【解决方案2】:

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

Encoding *GetEncoding (int codepage) {

}   

在 java 中,返回值可能是一个对象引用,所以在 C 中你会使用 *pointer

【讨论】:

    【解决方案3】:

    在 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", /* ... */ },
        /* ... */
    };
    

    玩得开心!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多