Зарезервированные слова в Objective C?

Некоторый полезный mencoder управляет, чтобы я узнал о при поиске некоторых инструментов редактирования аудио и редактирования видео:

от .xxx до Дампа .avi

mencoder movie.wmv -o movie.avi -ovc lavc -oac lavc 

звучат от видео:

mplayer -ao pcm -vo null -vc dummy -dumpaudio -dumpfile fileout.mp3 filein.avi 
16
задан Community 23 May 2017 в 11:45
поделиться

6 ответов

Все согласились, что @interface, @implementation и т. Д. Являются директивами препроцессора, а не ключевыми словами

Тогда все ошибались. #import и #pragma - это директивы препроцессора. @interface, @implementation, @protocol и т. Д. Являются ключевыми словами Objective-C, и это директивы компилятора . Они не были директивами препроцессора с тех пор, как NeXT расширил GCC для компиляции Objective-C без оригинальной реализации препроцессора Stepstone Objective-C.

10
ответ дан 30 November 2019 в 22:17
поделиться

Re: Николай Рухе предполагает, что self - это ключевое слово

self является параметром метода Objective-C типа id (аналогично тому, как _cmd также является параметром типа SEL ), а не ключевым словом. nil - это макрос, который расширяется до NULL . Я немного разочарован тем, что super не расширяется до макроса и не является параметром.

Из статьи в википедии:

Objective-C - это тонкий слой поверх C , и, более того, является строгим надмножеством C. Можно скомпилировать любую программу C с помощью компилятора Objective-C и свободно включать код C в класс Objective-C.

Это помешало бы Objective-C добавлять в язык какие-либо запрещенные ключевые слова.

4
ответ дан 30 November 2019 в 22:17
поделиться

Взгляд на Язык программирования Objective-C дает вам некоторые подсказки о том, что возможно, а что нет. Поскольку некоторые «ключевые слова» определены в файле заголовка, их замена может привести к наблюдаемому (и неожиданному) поведению.

1
ответ дан 30 November 2019 в 22:17
поделиться

Википедия определяет ключевые слова как:

В компьютерном программировании ключевое слово - это слово или идентификатор, которые имеют особое значение для языка программирования.

Я бы перевел это to: ключевое слово в языке не является терминальным по своей грамматике. (Между прочим, грамматика не содержит слово «ключевое слово» само по себе, так что здесь нет путаницы.)

Терминалы в грамматике будут такими:

  • void
  • char
  • short
  • int
  • long
  • float
  • double
  • signed
  • unsigned
  • id
  • const
  • volatile
  • in
  • out
  • inout
  • bycopy
  • byref
  • oneway
  • self
  • super
  • @interface
  • @end
  • @implementation
  • @end
  • @interface
  • @ конец
  • @implementation
  • @end
  • @protoco
  • @end
  • @class
2
ответ дан 30 November 2019 в 22:17
поделиться

Вы можете проверить Язык программирования Objective-C .

Насколько я могу судить, в этом документе ничего не классифицируется как «зарезервированное слово» . @implementation , @interface и т. Д. Называются «директивами компилятора».

1
ответ дан 30 November 2019 в 22:17
поделиться

Грамматика в Приложении B к оригинальной книге 1995 года определяет super как терминал «буквального символа», и это особый случай в синтаксисе получателя сообщения .

в буквальный символ является частью квалификатора протокола в ObjC 1.0 и повторно использовался в синтаксисе быстрого перечисления в ObjC 2.0 (который не имеет формального определения грамматики AFAIK).

id определен как часть спецификатора типа рядом с void , char , unsigned , типизированными типами и т. Д. .Если вы вызываете ключевое слово void , то id тоже.

2
ответ дан 30 November 2019 в 22:17
поделиться