Используйте Cython как конвертер Python в C

Ничто в стандарте C не наложило никаких требований на то, что система могла бы сделать с выражением. При написании стандарта было бы разумно вызвать следующую последовательность событий во время выполнения:

  1. Код загружает нулевой указатель в блок адресации
  2. Код просит блок адресации добавить смещение поля b.
  3. Блок адресации запускает ловушку при попытке добавить целое число в нулевой указатель (который должен для надежности это ловушка времени выполнения, хотя многие системы ее не улавливают).
  4. Система запускает по существу случайный код после отправки через вектор-ловушку, который никогда не был установлен, потому что код для его установки потеряли память, поскольку адресация ловушек не должна происходить.

Сама суть того, что в то время означало неопределенное поведение.

Обратите внимание, что большая часть компиляторы, появившиеся с первых дней C, будут рассматривать адрес члена объекта, расположенного на постоянном адресе, как константу времени компиляции, но я не думаю, что такое поведение vior был назначен, и ничто не было добавлено к стандарту, который бы определял, что вычисления адресов времени компиляции с использованием нулевых указателей должны быть определены в тех случаях, когда вычисления во время выполнения не будут.

32
задан Braiam 16 April 2017 в 21:52
поделиться