考慮下面的(有點構思)例如:標記的功能具有無副作用用Visual C++
// a.cpp
int mystrlen(const char* a) {
int l = 0;
while (a[l]) ++l;
return l;
}
// b.cpp
extern int mystrlen(const char*);
int foo(const char* text) {
return mystrlen(text) + mystrlen(text);
}
這將是非常好的,能告訴編譯器mystrlen()
沒有副作用,因此它可以重複使用mystrlen(text)
的舊結果,而不是調用它兩次。
我沒有在文檔中找到任何關於它的文章,或者restrict
或其中一個差異似乎也沒有做到這一點。查看所有優化的輸出代碼(開關/Ox
),表明編譯器確實生成了兩個調用。它甚至會這樣做,如果我把兩個功能放在一個模塊中。
任何解決方案,或任何人都可以確認在VC++中沒有解決方案?
你想要一個功能更強大的語言。 – SLaks
即使打開所有優化,它是否會這樣做(稱爲兩次)?如果它在同一個源文件中呢?還是一樣的結果? – Floris
@弗洛里斯:我使用過'/ Ox',即使在一個模塊中它會將函數內聯兩次。 – cxxl