Q:  How does one mix C and Objective-C code?  How can one call Objective-C from C?
어떻게하면 Objective 코드와 C를 같이 쓸 수 있나요? 어떻게 C에서 Objective C를 호출할 수 있나요? 

A:  Just do it!  C functions can freely send Objective-C messages, and Objective-C methods can freely call C functions.   For an example, look at main() of one of the applications in /NextDeveloper/Examples.
일단 해보세요! C함수는 Objective C 메세지를 전달 할 수 있고, Objective C 메소드는 자유롭게 C함수를 호출할 수 있습니다. 예제들이 있습니다. /NextDeveloper/Examples 에 들어있는 어플리케이션들의 main()을 보세요.

If you place Objective-C code in a “.c” file,  you need to compile the file with the Objective -C option.  The simplest way to do this is to change the “.c” suffix to “.m”, and then add the file name under “.m (other)”  in InterfaceBuilder’s Project Inspector.    If it’s not possible to change the suffix, compile the file using the -ObjC compiler flag.
당신의 프로젝트중 “.c” 파일에 들어있는 Objective C코드가 있다면, compile할때 file과 함께 Objective C option이 필요하게 될겁니다. 간단한 방법을 쓰자면 “.c” 파일의 확장자를 “.m”으로 바꾸고 Interface Builder의 Project Inspector에 “.m”으로 바꾼 파일이름을 추가합니다. 확장자를 절대 바꿀 수 없다면 file을 compile할때 -Objc 컴파일러 플래그를 사용하시면 됩니다.

You can place any C code in a “.m” file without any special handling.  The C code needs to extern id’s as per regular C scoping rules.
당신은 “.m”파일에 별도의 어떤 특별한 조작도 하지않은 어떤 C코드도 넣을 수 있습니다. C코드는 정규 C Scoping 규칙에 따른 extern id를 필요로 합니다.

Only within Objective-C methods can you directly access instance variables and the hidden variable “self.”  You must pass an object to a C function that needs access to it.   For example, this C function returns the width of a View:
당신은 오직 Objective-C 의메소드를 통해서만 인스턴스 변수와 숨겨진 “self”변수에 직접 엑세스 할 수 있습니다.
당신은 반드시 접근하려는 객체에  요구가 있는  C 함수에게 오브젝트를 넘겨야합니다(인수형태로). 예를 들자면 이 C함수는 View의 너비를 반환합니다.

NXCoord widthOfView(View *self) {    NXRect b;    [self getBounds:&b];   return b.size.width; }

You may access public instance variables like this:
당신이 public 인스턴스 변수에 접근하려면 이렇게 해도 됩니다.:

void setNumber(MyObject *self,int newValue) {    self->number = newValue; }

Remember that all instance variables are considered private unless explicitly declared public.  However, within the confines of a class implementation, all instance variables of that class are considered public.  So in the implementation for MyControl (a subclass of Control), you could write a C function to set the tag of a MyControl object like this:
기억하세요. 모든 인스턴스 변수는 명시적으로 public으로 선언되지 않는경우 private이라는걸 생각해야 합니다. 그러나 Class 구현의 경계안에서, 클래스안의 모든 인스턴스 변수는 public이라는것도 생각해야 합니다. (Control의 서브클래스인) MyControl의 구현에서, 당신은 MyControl객체의 태그를 설정하는 C함수를 작성할 수 있었습니다.

void setTag(MyControl *self,int newTag) {  self->tag = newTag; }


Valid for 1.0, 2.0, 3.0


jachin, neogeo님의 도움으로 번역되었습니다