[an error occurred while processing this directive]

В начало

ВВЕДЕНИЕ

1. ЭЛЕМЕНТЫ ЯЗЫКА СИ

2. СТРУКТУРА ПРОГРАММЫ

3. ОБЪЯВЛЕНИЯ

4. ВЫРАЖЕНИЯ

5. ОПЕРАТОРЫ

6. ФУНКЦИИ

7. ДИРЕКТИВЫ ПРЕПРОЦЕССОРА И УКАЗАНИЯ КОМПИЛЯТОРУ

8. МОДЕЛИ ПАМЯТИ

9. КРАТКОЕ ОПИСАНИЕ БИБЛИОТЕКИ

10. ПОЛНОЕ ОПИСАНИЕ БИБЛИОТЕКИ

ПРИЛОЖЕНИЕ А. Перечень особенностей реализации языка Си в различных версиях СП MSC и СП ТС

ПРИЛОЖЕНИЕ Б. СООБЩЕНИЯ ОБ ОШИБКАХ

ПРИЛОЖЕНИЕ В. Перечень библиотечных функций с указанием отличий в реализации

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ А. Перечень особенностей реализации языка Си в различных версиях СП MSC и СП ТС

1. В СП ТС добавлен специальный символ \? для представления символа знак вопроса (раздел 1.1.4).

2. В СП ТС шестнадцатеричное байтовое значение константы может начинаться не только префиксом \х, как в СП MSC префиксом \X. Вслед за префиксом \х в версии 4 СП MSC может следовать одна или две шестнадцатеричные цифры, а в версии 5 СП MSC — до трех шестнадцатеричных цифр (раздел 1.1.4).

3. В СП ТС при задании константы можно указать суффикс U (или u), означающий, что константа имеет тип unsigned int (раздел 1.2.1).

4. В СП ТС константе присваивается тип unsigned long, если ее значение превышает 65535, независимо от наличия или отсутствия суффикса U, а в СП MSC в этом случае константе присваивается тип long (раздел 1.2.1).

5. В СП ТС можно явно присвоить константе тип float, добавив к ней суффикс f или F (раздел 1.2.2).

6. Помимо односимвольных констант, в СП ТС реализованы двухсимвольные константы (раздел 1.2.3).

7. В СП MSC версии 5 и в СП ТС для формирования символьных строк, занимающих несколько строк текста программы, не требуется применения комбинации символов обратный слэш и новая строка. Символьные строки, следующие друг за другом и не разделенные ничем, кроме пробельных символов, объединяются компилятором языка Си в одну строку (раздел 1.2.4).

8. В СП ТС реализована опция компиляции, позволяющая хранить в памяти только одну из нескольких идентичных строк (раздел 1.2.4).

9. В идентификаторах версии 1.5 СП ТС допускается символ $, однако идентификатор не может с него начинаться.

10. В СП ТС реализованы следующие ключевые слова, которые отсутствуют в СП MSC:

asm _cs _CH
interrupt _ds _CL
  _es _CX
  _ss _DH
  _AH _DL
  _AL _DX
  _AX _BP
  _BH _DI
  _BL _SI
  _BX _SP

Ключевое слово fortran реализовано только в СП MSC. В версии 4 СП MSC ключевые слова const и volatile зарезервированы, но использовать их невозможно. В версии 5 СП MSC ключевое слово volatile реализовано лишь синтаксически, а const — полностью (как синтаксически, так и семантически). В СП ТС ключевые слова const и volatile реализованы полностью. Ключевое слово interrupt в СП MSC версии 4 не реализовано (раздел 1.4).

11. В СП ТС существует опция компиляции, допускающая вложенные комментарии (раздел 1.5).

12. Тип long float реализован только в версии 4 СП MSC и эквивалентен типу double. В версии 5 СП MSC и в СП ТС реализован тип long double, причем в версии 5 СП MSC и версии 1.5 СП ТС он эквивалентен типу double, а в версии 2.0 СП ТС является самостоятельным плавающим типом (раздел 3.1).

13. В СП ТС существует опция компиляции, задающая выравнивание всех объектов, занимающих более одного байта, на границу четного адреса (раздел 3.2).

14. В СП ТС использование модификаторов near, far, huge ограничено: они могут быть записаны только перед идентификатором функции или перед признаком указателя — звездочкой (раздел 3.3.3.1).

15. В СП MSC, в отличие от СП ТС, недопустима инициализация const объектов, имеющих класс памяти auto (раздел 3.3.3.2).

16. Если с помощью операции приведения типа преобразовать указатель на const к указателю на тип, отличный от const, то СП ТС позволит выполнить присваивание объекту через преобразованный указатель (раздел 3.3.3.2).

17. В СП ТС указатель типа huge хранится в нормализованном формате (раздел 3.3.3.4).

18. В СП MSC модификатор huge применяется только к массивам, размер которых превышает 64К. В СП ТС недопустимы массивы больше 64К, а модификатор huge применяется к функциям и указателям для спецификации того, что адрес функции или указуемого объекта имеет тип huge (раздел 3.3.3.4).

19. В СП ТС, если в одном объявлении класса памяти auto или register либо внутри структуры содержатся описатели нескольких объектов, порядок их размещения в памяти будет обратным (раздел 3.4.3).

20. Для битового поля в версии 4 СП MSC спецификация типа должна задавать беззнаковый целый тип (unsigned int). В версии 5 СП MSC спецификация типа может задавать как знаковый, так и беззнаковый целый тип, причем любого размера — char, int, long. При этом для неименованного битового поля выравнивание будет производиться на границу того типа, который задан спецификацией. Однако знаковый целый тип для битовых полей реализован лишь синтаксически, а в выражениях битовые поля участвуют как беззнаковые значения.

В СП ТС битовое поле может иметь либо тип unsigned int, либо тип signed int, причем знак, в отличие от версии 5 СП MSC, учитывается при вычислениях (раздел 4.4.3).

21. В СП MSC каждый элемент структуры, тип которого отличен от char или unsigned char, выравнивается в памяти на границу четного адреса. В СП ТС по умолчанию выравнивания в структурах не производится, однако существует опция компиляции, специфицирующая выравнивание. При этом обеспечивается следующее:

— структура будет начинаться на границе машинного слова (иметь четный адрес);

— любой элемент, имеющий тип, отличный от char или unsigned char, будет иметь четное смещение от начала структуры;

— для того чтобы структура содержала четное число байтов, в конец структуры может быть добавлен лишний байт.

В версии 4 СП MSC элемент структуры, представляющий собой структуру нечетной длины, дополняется лишним байтом в конце, чтобы его длина стала четной. В версии 5 СП MSC это дополнение лишним байтом производится только в том случае, когда тип следующего элемента структуры требует его размещения с четного адреса (раздел 3.4.3).

22. СП MSC, в отличие от СП ТС, не допускает в объединении битовые поля (раздел 3.4.4).

23. В СП ТС нельзя получить значение по операции косвенной адресации, примененной к указателю на тип void. В СП MSC в этом случае выдается предупреждающее сообщение (раздел 3.4.6).

24. В версии 5 СП MSC, а также в СП ТС реализован метод объявления прототипов функций (раздел 3.5).

25. Компиляторы языка Си по-разному реагируют на наличие в исходном файле двух объявлений одной переменной с различными спецификациями класса памяти (раздел 3.6.1).

26. Инициализация переменных составных типов (массив, структура, объединение), имеющих класс памяти auto, запрещена в СП MSC, но допускается в СП ТС. В СП ТС также допустима инициализация переменных класса памяти auto с модификатором const (раздел 3.7).

27. В СП ТС не обязательно заключать инициализатор объединения в фигурные скобки (раздел 3.7.2).

28. Область действия тега, объявленного в составе абстрактного имени типа, распространяется в СП MSC до конца охватывающего блока, а в СП ТС — до конца тела функции (раздел 3.8.3).

29. В директивах препроцессора СП ТС позволяет использовать операцию sizeof (раздел 4.2.9).

30. Операция унарного плюса реализована полностью только в СП ТС. В СП MSC версии 5 она реализована только синтаксически (раздел 4.3.2).

31. В СП MSC версии 4 операндом операции sizeof может быть имя абстрактного типа данных либо L-выражение. В СП MSC и в СП ТС, помимо перечисленного, допустимо произвольное выражение. Применение операции sizeof к идентификатору функции в СП ТС считается ошибкой, а в СП MSC эквивалентно определению размера указателя на функцию (раздел 4.3.2).

32. В операции сдвига преобразования по умолчанию выполняются в СП MSC над обоими операндами совместно, а в СП ТС независимо над каждым операндом (раздел 4.3.5).

33. В операции присваивания в СП MSC версии 5 преобразование значения от типа unsigned long к типу double производится напрямую, без промежуточного преобразования к типу long (раздел 4.7.1).

34. В СП MSC для того, чтобы присвоить указатель на данные указателю на функцию (или обратно), необходимо выполнить явное приведение его типа (раздел 4.7.1).

35. Выражение переключения в операторе переключателя switch должно иметь целочисленный тип. В версии 4 СП MSC этот тип не должен превышать по размеру int; в версии 5 СП MSC и в СП ТС это может быть любой целочисленный тип, в том числе enum, однако в версии 5 СП MSC значение все равно преобразуется к типу int (раздел 5.10).

36. В версии 5 СП MSC и в СП ТС поддерживается форма записи заголовка определения функции, основанная на методе прототипов (раздел 6.2). -

37. В СП MSC версии 5 и в СП ТС реализован модификатор типа функции interrupt (раздел 6.2.2).

38. Если функции передается больше фактических аргументов, чем объявлено имен в списке типов аргументов в ее предварительном объявлении, и этот список не завершен многоточием, то компилятор выдаст предупреждающее сообщение в СП MSC и сообщение об ошибке в СП ТС (раздел 6.4.1).

39. Если список типов аргументов в объявлении функции содержит специальное имя типа void, то компилятор языка Си ожидает отсутствие фактических аргументов в вызове функции и отсутствие формальных параметров в определении функции. Если какое-либо из этих условий окажется нарушено, то компилятор выдает предупреждающее сообщение в СП MSC и сообщение об ошибке в СП ТС (раздел 6.4.1).

40. В СП MSC версии 5 и в СП ТС в строке, содержащей препроцессорную директиву, перед символом # допустимы пробельные символы (раздел 7.1).

41. В СП MSC версии 5 и в СП ТС реализованы две специальные препроцессорные операции: склейка лексем (##) и преобразование макроаргумента (#) (раздел 7.2.2).

42. В СП ТС имеется возможность задавать имя пути в директиве #include с помощью макроопределения (раздел 7.3).

43. СП ТС, в отличие от СП MSC, позволяет использовать операцию sizeof в ограниченном константном выражении в препроцессорных директивах #if и #elif (раздел 7.4.1).

44. В СП ТС реализована директива обработки ошибок #error и пустая директива # (разделы 7.6, 7.7).

45. В СП MSC не реализованы псевдопеременные _DATE_ и _TIME_ (раздел 7.9).

46. Организация моделей памяти в СП ТС имеет ряд отличий от СП MSC (раздел 8.3).

[an error occurred while processing this directive]