Некоторые части языка "C" по своей сути машинно-зависи-мы. Следующие ниже перечисление потенциальных трудностей хо-тя и не являются всеобъемлющими, но выделяет основные изних. Как показала практика, вопросы, целиком связанные с ап-паратным оборудованием, такие как размер слова, свойстваплавающей арифметики и целого деления, не представляют осо-бенных затруднений. Другие аспекты аппаратных средств нахо-дят свое отражение в различных реализациях. Некоторые изних, в частности, знаковое расширение (преобразующее отрица-тельный символ в отрицательное целое) и порядок, в которомпомещаются байты в слове, представляют собой неприятность,которая должна тщательно отслеживаться. Большинство из ос-тальных проблем этого типа не вызывает сколько-нибудь значи-тельных затруднений. Число переменных типа REGISTER, которое фактически можетбыть помещено в регистры, меняется от машины к машине, такжекак и набор допустимых для них типов. Тем не менее все ком-пиляторы на своих машинах работают надлежащим образом; лиш-ние или недопустимые регистровые описания игнорируются. Некоторые трудности возникают только при использованиисомнительной практики программирования. Писать программы,которые зависят от каких- либо этих свойств, является чрез-вычайно неразумным. Языком не указывается порядок вычисления аргументов фун-кций; они вычисляются справа налево на PDP-11 и VAX-11 ислева направо на остальных машинах. порядок, в котором про-исходят побочные эффекты, также не специфицируется. Так как символьные константы в действительности являютсяобъектами типа INT, допускается использование символьныхконстант, состоящих из нескольких символов. Однако, посколь-ку порядок, в котором символы приписываются к слову, меняет-ся от машины к машине, конкретная реализация оказываетсявесьма машинно-зависимой. Присваивание полей к словам и символов к целым осуществ-ляется справо налево на PDP-11 и VAX-11 и слева направо надругих машинах. эти различия незаметны для изолированныхпрограмм, в которых не разрешено смешивать типы (преобразуя,например, указатель на INT в указатель на CHAR и затем про-веряя указываемую память), но должны учитываться при согла-совании с накладываемыми извне схемами памяти. Язык, принятый на различных компиляторах, отличаетсятолько незначительными деталями. Самое заметное отличие сос-тоит в том, что используемый в настоящее время компилятор наPDP-11 не инициализирует структуры, которые содержат полябитов, и не допускает некоторые операции присваивания в оп-ределенных контекстах, связанных с использованием значенияприсваивания.