2015-02-10 2 views
1

Я знаком с C и теперь изучаю Objective-C.Могут ли функции и указатели функций использоваться в ObjC так же, как они есть в C?

Я часто использую указатели на функции

void (*callback)(int*restrict, char*restrict) 

Будет ли использоваться в Objective-C? Особенно в структурах, например, так:

struct mytype myvar = { 
    .first = myCallback; 
    .second = myCallback2; 
} 

Кроме того, я хотел бы иметь функциональные прототипы, как

void function(int * restrict a, char * restrict b); 
char * function (char * a); 
... 

Нет ли проблем с использованием этого стиля?

+1

Objective-C (для IOS,/Xcode) является [поддержан звоном] (http://clang.llvm.org/docs/UsersManual.html) и "C", он поддерживает .. «Clang разработан для поддержки семейства языков программирования C, в том числе C, Objective-C .. В дополнение к этим базовым языкам и их диалектам Clang поддерживает широкий спектр языковых расширений .. для совместимости с GCC , Microsoft и других популярных компиляторов, а также для улучшения функциональности с помощью специфичных для Clang функций ». – user2864740

+1

Соответствие App Store не соответствует теме, поэтому я отредактировал ваш вопрос, чтобы быть строго о синтаксисе и языковых возможностях, которые вас интересуют. Для получения дополнительной информации см. [Вопросы, связанные с разработчиками, о хранилищах приложений по теме для Stack Overflow?] (Http://meta.stackoverflow.com/q/175701) –

+0

@Josh: спасибо за ссылки. Будет копаться в нем :) +1 – Larry

ответ

0

Да.

Вы можете использовать любую стратегию C, выбранную вами в приложении Objective-C. Вам все равно придется написать Objective-C, чтобы начать UIApplication (или использовать сторонний инструмент для этого).

Одна вещь, чтобы иметь в виду, однако, является то, что int будет разной длины в зависимости от машины, и вы должны явно выбрать int32_t или int16_t или int8_t, если вы действительно не хотите использовать NSIntegertypedef, что абстрагирует это машина разница.

+0

Абсолютно Ian, uint32_t, int32_t и т. Д. Являются моими друзьями. Ницца. Нет углового случая (ов), чтобы знать? – Larry

+0

Я еще не нашел. Дайте мне знать, если вы столкнетесь с чем-то странным. –

+0

Вы можете использовать их, даже если вы только немного хотите. ObjectiveC является строгим надмножеством C. Поэтому принятый ответ должен быть однозначным YES.ps BOOL также принципиально отличается от 32-64 бит, потому что 32-битный BOOL на самом деле старше, чем у bool. – Jef

4

Clang (компилятор по умолчанию, используемый Xcode) утверждает, что поддержка C11 для Objective C (см. Language Compatibility).

Это означает, что указатели на функции, ограничения, структуры и декларации будут работать так, как вы ожидали.

Одно слово совета: не сражайтесь с системой; это создаст больше работы для вас и менее надежного программного обеспечения для ваших пользователей. Программисты должны быть как вода.

Пустой ваш разум, бесформенный, бесформенный - как вода. Теперь вы кладете воду в чашку, она становится чашкой; Вы кладете воду в бутылку, она становится бутылкой; Вы кладете его в чайник, он становится чайником. Теперь вода может течь или она может упасть. Будь водой, друг мой.

- Bruce Lee

+0

Никогда не останавливайся, сокрушай все, что можешь, и будешь явным злом: отек, который его убил. Два видения. Та же цель. Но я получаю вашу точку :) – Larry

Смежные вопросы