Will the strlen() function below get called just once (with the value stored for further comparisons); or is it going to be called every time the comparison is performed?
for (i = 0; i < strlen(word); i++)
{ /* do stuff */ }
That's implementation-dependent. Usually, it gets called every time, but, if the compiler can see that word
never changes, and that strlen
is a pure function (no side effects), it can lift the call.
See: http://underhanded.xcott.com/?page_id=15 for a well-known example of this being exploited. :-)
I'll sometimes code that as ...
for (int i = 0, n = strlen(word); i < n; ++i) { /* do stuff */ }
... so that strlen is only called once (to improve performance).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With