Ошибка компиляции с объявлением указателя функции

Я пытаюсь импортировать openssl в мой быстрый проект, но когда я добавляю #import "ras.h" в xxx-Bridging-Header.h, я получил ошибку компиляции ниже.

<unknown>:0: error: /Users/wenyun/workspace/newsvn/newios/ios/VanJoyPay2/VanJoyPay2/opensource/OpenSSLRSAWrapper/openssl/include/openssl/rsa.h:100: expected ')'
<unknown>:0: note: /Users/wenyun/workspace/newsvn/newios/ios/VanJoyPay2/VanJoyPay2/opensource/OpenSSLRSAWrapper/o penssl/include/openssl/rsa.h:100: to match this '('

ras.h: 100:

int (*rsa_mod_exp)(BIGNUM *r0,const BIGNUM *I,RSA *rsa,BN_CTX *ctx); /* Can be null */

Я исправил ошибку, переименовав const BIGNUM *I в const BIGNUM *I. Кто-нибудь знает, почему персонаж I настолько особенный?

Я сделал еще один тест сегодня, результат выглядит так странно. Я создал новый быстрый проект, написал 3 файла заголовка:

test.h
int test(char *I);

test2.h
#import "test3.h"
#import <Foundation/Foundation.h>

test3.h
int test3();


xxx-Bridging-Header.h
#import "test2.h"
#import "test.h"

Я снова получил ошибку компиляции!

Наконец, удаление "#import" делает все нормально.

Why the character "I" could not work together with #import <xxx>?

Ответы

Ответ 1

Проблема не связана с Swift. Это вызвано предыдущим определением I в файле /usr/include/complex.h (как Брайан Чен догадался).

Вот оскорбительные строки, сообщенные компилятором:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk/usr/include/complex.h:42:11: note: expanded from macro 'I'
#define I _Complex_I