Есть ли платформа, которая не поддерживает ANSI C 89? - PullRequest
0 голосов
/ 13 февраля 2012

Кажется, ANSI C 89 - лучший выбор для написания кроссплатформенной библиотеки, потому что многие платформы (Windows, Unix, Linux, Mac, Android, ...) ее поддерживают.

Но есть липлатформа, которая не поддерживает ANSI C 89?

Я не уверен насчет J2ME, iPhone и т. д.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Любая платформа, которая имеет слишком мало памяти для кода или данных, не поддерживает C. Как предписано стандартом в разделе "2.2.4.1 Ограничения перевода":

Реализация должна иметь возможность переводить и выполнять по крайней мере одну программу, которая содержит по крайней мере один экземпляр каждого из следующих ограничений:

  • 15 уровней вложенности составных операторов, управление итерацией
    структуры и управляющие структуры выбора

  • 8 уровней вложенности условного включения

  • 12 указателей, массивов и функций объявления (в любых комбинациях)
    изменение арифметики, структуры, объединения или неполного типа
    в объявлении

  • 31 объявлений, вложенных в круглые скобки внутри полного объявления

  • 32 выражения, вложенные в круглые скобки внутри полного выражения

...

  • 127 идентификаторов с объявленной областью действия блокаd в одном блоке

...

  • 31 параметров в одном определении функции

  • 31 аргументов в одномвызов функции

...

  • 509 символов в строковом литерале или строковом литерале (после конкатенации)

  • 32767 байт в объекте (только в размещенной среде)

...

  • 127 членов в одной структуре или объединении

...

  • 15 уровней вложенной структуры или определения объединений в одном
    struct-объявление-list

Вероятно, вы найдете другие требования, если внимательно прочитаете стандарт.

В конце концов, если достаточно памяти, даже слабая платформа может поддерживать C. Для того, чтобы преодолеть эту проблему, потребуется дополнительный код.аппаратные ограничения (например, поддержка требуемых типов, арифметические операции и т. д.).

1 голос
/ 13 февраля 2012

Во-первых, ANSI C обычно относится к C89, поэтому C89 является избыточным.

iOS поддерживает ANSI C, как и большинство платформ.J2ME является платформой Java и по умолчанию не поддерживает C вообще.

Все основные платформы поддерживают ANSI C, но есть некоторые встроенные платформы, которые этого не делают.Я не думаю, что вы должны беспокоиться о любом из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...