Когда стандарт C обсуждает реализацию , это означает реализацию языка C.Таким образом, реализация C - это все 1 , необходимое для интерпретации и выполнения программ на языке C.
Обычно включает компилятор, сопутствующие или совместимые инструменты разработчика, такие как компоновщик и программное обеспечение.библиотека, обеспечивающая подпрограммы поддержки, операционную систему и ее компоненты, такие как загрузчик, и компьютерную систему для ее запуска.
В одной компьютерной системе может быть установлено несколько компиляторов.Вы можете иметь GCC и Clang.Когда программы скомпилированы с GCC и выполнены, это одна реализация C, а когда они скомпилированы с Clang и выполнены, это другая реализация C, даже если они обе работают в одной и той же системе.Одна реализация C - это конкретный полный набор вещей, который используется для перевода и выполнения программ на Си.
Поскольку стандарт Си не полностью определяет, как все, что вы пишите в программе на С, некоторые вещи могут отличаться в разных реализациях,Примечательно, сколько битов в int
может варьироваться.Эти вещи зависят от реализации.
Использование «машинно-зависимых» при обращении к C часто является неточным использованием языка, когда действительно подразумевается «зависящий от реализации».Существует тесная связь между функциями машины и особенностями реализации языка Си.Когда кто-то пишет компилятор для машины, которая имеет только 32-разрядные регистры и 32-разрядные целочисленные арифметические инструкции, они, скорее всего, собираются спроектировать свой компилятор так, чтобы int
был 32-разрядным.Тем не менее, это выбор.Вполне возможно написать компилятор для 32-битной машины, в которой int
равен 64 битам или 16 битам.Первые могут быть более сложными (потому что они должны создавать 64-битную арифметику путем компиляции одиночных арифметических операторов C в несколько инструкций) или расточительными (потому что выполнение только 16-битных операций на машине, способной к 32-битным операциям, не использует ее полноемощность), но это вполне возможно.Таким образом, фактические свойства реализации C являются функцией всей реализации, а не только машины, на которой она работает.
Сноска
1 Стандарт C определяет«Реализация» - «конкретный набор программного обеспечения, работающий в конкретной среде перевода с определенными параметрами управления, который выполняет перевод программ и поддерживает выполнение функций в конкретной среде выполнения» (C 2011 [N1570] 3.12),Однако, разумеется, для того, чтобы выполнить или понять исполняемую программу, являющуюся результатом компиляции, одному из них также требуется аппаратное обеспечение или, по меньшей мере, спецификация аппаратного обеспечения.Поэтому мы можем рассматривать реализацию как все, что требуется для интерпретации и выполнения программы на Си.