Czy kod samoczynnie modyfikujący jest możliwy w sposób przenośny w C?Czy standard C pozwala na kod samoczynnie modyfikujący?
Powód, dla którego pytam, polega na tym, że w pewnym sensie OOP polega na kodzie samo-modyfikującym (ponieważ kod wykonywany w czasie wykonywania jest faktycznie generowany jako dane, np. W v-table), a jednak, Wydaje się, że gdyby zaszło to zbyt daleko, uniemożliwiłoby to większość optymalizacji w kompilatorze.
Na przykład
void add(char *restrict p, char *restrict pAddend, int len)
{
for (int i = 0; i < len; i++)
p[i] += *pAddend;
}
optymalizacji kompilator może unieść *pAddend
z pętli, ponieważ nie zakłócają p
. Jednakże, nie jest to już poprawna optymalizacja samododującego kodu.
W ten sposób wydaje się, że C nie pozwala na samodefiniowanie kodu, ale czy nie oznacza to, że nie można wykonywać pewnych czynności, takich jak OOP w C? Czy C naprawdę obsługuje samodefiniujący się kod?
C ma wskaźniki funkcyjne, które są wszystkim, czego potrzeba do zbudowania mechanizmu ekspedycji w czasie wykonywania. Nie potrzebujesz "samododującego kodu". – Nemo
Nie powiedziałbym, że implementacja OOP w (powiedzmy) C++ używa samodefiniującego się kodu, moim zdaniem jest to po prostu kod sterowany danymi.Funkcje wirtualne nie są niczym innym, jak koncepcyjnie różni się od prostego "przełącznika". – Vlad
@Noo: Czy to nadal jest forma kodu samoczynnie modyfikującego? – Mehrdad