Потому что, с одной стороны, возможность взаимодействия с операционной системой не совместима между платформами. Даже между Linux / x86, Windows и Mac / Intel (которые все могут использовать один и тот же процессор) способ действий может сильно отличаться.
Таким образом, хотя компилятор может создавать объектные файлы, которые будут работать, в тот момент, когда вы связываете эти объекты с библиотеками, специфичными для платформы, они по сути становятся непереносимыми.
Одним из примеров является распределение памяти. Если вы хотите запросить больше памяти у ОС под UNIX, вы можете использовать библиотечную функцию brk
или sbrk
. Это не часть стандартной библиотеки C, более специфичная для UNIX.
С другой стороны, Windows может предоставить функцию Win32GetMem
для того же.