Внешние функции C в Objective-C - PullRequest
3 голосов
/ 13 июня 2009

Я разрабатываю приложения для iPhone, и после обновления до SDK 3.0, я получаю сообщение об ошибке CFWriteStreamCreateWithFTPURL при связывании. Это код, который я вызываю, чтобы получить ошибку.

streamInfo.writeStream = CFWriteStreamCreateWithFTPURL(NULL, urlRefWrite);

У меня есть идея, что это можно решить, используя extern "C", но после того, как я его погуглил, я не нашел решения своей проблемы. Есть идеи?

Заранее спасибо

Ответы [ 2 ]

9 голосов
/ 05 февраля 2010

extern "C" может помочь. Я могу получить функции C для компиляции и компоновки, выполняя что-то вроде этого и в реализации, и в объявлении заголовочного файла. Вот простой пример:



#if __cplusplus
extern "C" {
#endif

/// converts a degree value to radians
double DegreesToRadians(double degrees);

/// converts radian value to degrees
double RadiansToDegrees(double radians);


#if __cplusplus
}   // Extern C
#endif


Файл реализации:


#import "Math.h"

#if __cplusplus
extern "C" {
#endif


double DegreesToRadians(double degrees) {return degrees * M_PI / 180;};
double RadiansToDegrees(double radians) {return radians * 180/M_PI;};


#if __cplusplus
} //Extern C
#endif

3 голосов
/ 24 октября 2009

Вы никогда не должны использовать extern "C" в проекте Objective-C. Это потому, что Objective-C является строгим надмножеством C.

...