는 다음 (조금 생각) 예를 고려 아무런 부작용이없는 등의 기능을 표시 :는 비주얼 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
@Floris :'/ Ox'을 사용했는데 하나의 모듈에서 함수를 두 번 인라인합니다. – cxxl