[an error occurred while processing this directive] | |||||||||||||||||||||||||||||||
7. ДИРЕКТИВЫ ПРЕПРОЦЕССОРА И УКАЗАНИЯ КОМПИЛЯТОРУ 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:
Ключевое слово 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] |