Вы должны использовать файл .h, как и файлы .m, чтобы объявить, что вы делаете в другом файле. Итак, вам нужно что-то вроде этого для этого сценария (они неполные):
returnfloat.c
float returnFloat() {
return 10.0;
}
returnfloat.h
float returnFloat(void);
usefloat.m
#import "returnfloat.h"
- (void) someMethod {
float ten = returnFloat();
}
Проблема (выдаваемая вашими предупреждениями о "неявном объявлении") заключается в том, что компилятор предполагает, что вы вызываете что-то, что возвращает int
или id
, а не float
. Когда вы работаете с C, вещи должны быть прототипированы (GCC будет обрабатывать файл .c как C, и все правила C применяются, даже если вы находитесь в проекте Objective-C).
Если вы хотите увидеть пример, вот что-то из одного из моих проектов - рабочий код (вы можете написать чистый C в файле, заканчивающемся на .m, и GCC будет обрабатывать его как Objective-C в некотором смысле ):
DebugF.m
#import "DebugF.h"
void __Debug(const char *file, int line, NSString *format, ...) {
#ifdef DEBUG
/* Wraps NSLog() with printf() style semantics */
#endif
}
DebugF.h
#ifndef __DEBUGF_H_INCLUDED__
#define __DEBUGF_H_INCLUDED__
#ifdef DEBUG
#define DebugF(args...) __Debug(__FILE__, __LINE__, args)
#else
#define DebugF(...)
#endif /* DEBUG */
void __Debug(const char *file, int line, NSString *fmt, ...);
#endif /* __DEBUGF_H_INCLUDED */
SomeViewController.m
DebugF(@"Got these arguments: %u, %@, %@", 4, anObject, [anObject somethingElse]);