Возможно ли самомодифицирующийся код переносимым способом в 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 поддерживает самомодифицирующийся код?