Если стандарт C (или другого языка) заявляет, что некоторый конкретный код будет иметь неопределенное поведение в некоторой ситуации, это означает, что компилятор C может генерировать код, чтобы делать все, что он хочет в этой ситуации, , оставаясь при этом совместимым сэтот стандарт .Многие конкретные реализации языка имеют документированное поведение, которое выходит за рамки того, что требуется стандартным языковым стандартом.Например, Whizbang Compilers Inc. может явно указать, что его конкретная реализация memcpy всегда будет копировать отдельные байты в порядке адресов.В таком компиляторе код, подобный следующему:
unsigned char z[256];
z[0] = 0x53;
z[1] = 0x4F;
memcpy(z+2, z, 254);
, будет иметь поведение, которое было определено в документации Whizbang , даже если поведение такого кода не указано ни одним из поставщиков.конкретная спецификация языка Си.Такой код будет совместим с компиляторами, которые соответствуют спецификации Whizbang, но может быть несовместим с другими компиляторами, которые соответствуют различным стандартам C, но не соответствуют спецификациям Whizbang.
Существует много ситуаций, особенно со встроенными системами,где программы должны будут делать некоторые вещи, которые стандарты C не требуют для компиляторов.Невозможно написать такие программы, которые были бы совместимы со всеми совместимыми со стандартами компиляторами, поскольку некоторые совместимые со стандартами компиляторы могут не предоставлять какой-либо способ выполнить то, что необходимо сделать, и даже те, которые действительно могут требовать другого синтаксиса.Тем не менее, часто есть значительная ценность в написании кода, который будет корректно выполняться любым стандартным компилятором.