Если ваш AniUtils.h
файл включен другими любыми другими Objective-C классами (например, .m файлы; не Objective-C ++, .mm файлы), то первым способом, который вы реализовалиextern C
оператор вызовет ошибки.
Например, вот простой класс Objective C, который будет импортировать проблемный класс AniUtils.h
Objective-C ++.Обратите внимание, что поскольку эти файлы WowClass.h
& WowClass.m
, эти файлы будут обрабатываться как обычный Objective-C:
WowClass.h:
#import <Foundation/Foundation.h>
#import "AniUtils.h"
@interface WowClass : NSObject {
}
@end
WowClass.m:
#import "WowClass.h"
@implementation
.....
@end
Теперь, если ваш AniUtils.h
определен первым способом, вы получите ошибки при попытке обработать файл WowClass.m
, который включает в себя оператор extern C
, как обычный Objective-C.Вместо этого вам нужно обусловить оператор extern C
в AniUtils.h
:
// AniUtils.h
#ifdef __cplusplus
extern "C" {
#endif
// body of included file
#ifdef __cplusplus
}
#endif
Конечно, альтернативой может быть простое переименование WowClass.m
в WowClass.mm
, чтобы интерфейс WowClass
иФайлы реализации всегда обрабатываются как Objective-C ++, но в этом вопросе упущено.