【发布时间】:2012-05-07 06:31:43
【问题描述】:
如何用C编写这种代码??
public static Encoding GetEncoding (
int codepage
)
【问题讨论】:
-
你不能在 C 中拥有对象,但你可以拥有指向数据
structures 的指针,并且一切都是公开的。顺便说一句,一切都是有效的static你在考虑 C++ 吗?您是否尝试使用 JNI?
如何用C编写这种代码??
public static Encoding GetEncoding (
int codepage
)
【问题讨论】:
structures 的指针,并且一切都是公开的。顺便说一句,一切都是有效的static 你在考虑 C++ 吗?您是否尝试使用 JNI?
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 中没有正式的方法,static 修饰符意味着别的东西。也没有访问控制修饰符。所以:
Encoding *GetEncoding (int codepage) {
}
在 java 中,返回值可能是一个对象引用,所以在 C 中你会使用 *pointer。
【讨论】:
在 C 中,没有访问控制,也没有 this。所以public 和static 已经是唯一的做事方式了。
您可能希望头(接口)文件包含原型
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", /* ... */ },
/* ... */
};
玩得开心!
【讨论】: