Consider the following (a bit conceived) example:
// 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);
}
It would be very nice to be able to tell the compiler that mystrlen()
doesn't have side-effects and thus it can re-use the old result from mystrlen(text)
instead of calling it twice.
I don't find anything in the docs about it and restrict
or one of its variances doesn't seem to do the job, either. A look at the output code with all optimizations on (switch /Ox
) shows that the compiler really generates two calls. It even does so if I put both functions in one module.
Any solution to this or can anyone confirm that there is no solution in VC++?