在C中以可移植的方式可以自修改代碼嗎?C標準允許自修改代碼嗎?
我問的原因是,在某種程度上,OOP依靠自修改代碼(因爲在運行時執行的代碼實際上是作爲數據生成的,例如在一個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做一些事情就像OOP? C真的支持自修改代碼嗎?
C有函數指針,這是所有你需要建立一個運行時的調度機制。你不需要「自我修改代碼」。 – Nemo
我不會說(說)C++中的OOP實現使用自修改代碼,在我看來,它只是數據驅動的代碼。虛擬功能在概念上與簡單的'switch'完全不同。 – Vlad
@Nemo:那還不是一種自修改代碼的形式嗎? – Mehrdad