Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how many times will strlen() be called in this for loop?

Tags:

c

loops

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 */ }
like image 900
between Avatar asked Jan 12 '10 14:01

between


2 Answers

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. :-)

like image 175
Chris Jester-Young Avatar answered Nov 15 '22 20:11

Chris Jester-Young


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).

like image 37
ChrisW Avatar answered Nov 15 '22 18:11

ChrisW