Я унаследовал новый проект, в котором есть несколько предупреждений о цикле сохранения, вызванных неявным сохранением себя в различных блоках.
Пытаясь исправить это, я написал
__weak typeof(self) weakSelf = self;
Для создания слабой ссылки для использования внутри блока.
Однако Xcode v. 5.1.1 дает загадочное предупреждение
Lexical or Preprocessor Issue
Extension used
Я здесь в недоумении - что это значит и как от этого избавиться?
1 ответ
Вы получаете это предупреждение при использовании typeof
, если "педантичные предупреждения" включены в настройках сборки. В «Быстрой справке» для этого параметра:
Описание Выдавать все предупреждения, требуемые строгими стандартами ISO C и ISO C ++; отклонить все программы, использующие запрещенные расширения, а также некоторые другие программы, не соответствующие ISO C и ISO C ++. Для ISO C следует версии стандарта ISO C, заданной любой используемой опцией -std. [GCC_WARN_PEDANTIC, -pedantic]
Я не эксперт в стандартах (ISO) C, но согласно https://gcc.gnu.org/onlinedocs/gcc/Typeof.html:
Если вы пишете файл заголовка, который должен работать при включении в ISO C программ напишите
__typeof__
вместоtypeof
. См. Альтернативные ключевые слова.
И http://clang.llvm.org/docs/UsersManual.html:
Парсер распознает «
asm
» и «typeof
» как ключевые слова в режимах gnu *; варианты «__asm__
» и «__typeof__
» распознаются во всех режимах.
Вместо этого вы можете использовать __typeof__
если вы не хотите отключать предупреждение:
__weak __typeof__(self) weakSelf = self;
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
Apple LLVM 5.1 - Warning Policies
настройка дляPedantic Warnings
-NO
. Где еще это можно было бы включить?