Допускает ли стандарт C самомодифицирующийся код?

Возможно ли самомодифицирующийся код переносимым способом в C ?

Причина, по которой я спрашиваю, заключается в том, что в некотором смысле ООП полагается на самомодифицирующийся код (потому что код, который выполняется во время выполнения, фактически генерируется как данные, например, в v-таблице), и тем не менее, он кажется, что если зайти слишком далеко, это предотвратит большинство оптимизаций в компиляторе.

Например:

void add(char *restrict p, char *restrict pAddend, int len)
{
    for (int i = 0; i < len; i++)
        p[i] += *pAddend;
}

Оптимизирующий компилятор мог бы вывести * pAddend из цикла, потому что это не не мешает p . Однако больше не является допустимой оптимизацией в самомодифицирующемся коде .

Таким образом, кажется, что C не позволяет себе -модифицирующий код, но в то же время не означает ли это, что вы не можете делать некоторые вещи, такие как ООП в C? Действительно ли C поддерживает самомодифицирующийся код?

5
задан Mehrdad 18 June 2011 в 21:28
поделиться