for문에서 strlen()은 매번 계산되나요?


소스코드

for (int i = 0; i < strlen(ss); ++i)
{
    // 후엥엥
}

발생하는 문제 및 실행환경

이런 코드를 짜고 생각해보니까 for문 안에서 ss가 바뀔 수도 있으니 strlen(ss)는 매번 계산되야 할 것 같은데

근데 또 매번 strlen()하면 속도가 떨어지니까 컴파일러가 그냥 고정값으로 대치할수도 있고..??

이 코드는 어떻게 최적화 되는 걸까요? 그때그때 상황따라 다른코드가 되는 걸까요? ?_?

  • 2016년 02월 04일에 작성됨

조회수 256


1 답변


좋아요
0
싫어요
채택취소하기

말씀하신 대로 strlen()은 문자열 길이가 중간에 바뀔 수도 있기 때문에 매 반복문마다 다시 계산됩니다.

for문 안에서 ss가 바뀌지 않는 경우는 컴파일러가 자동으로 최적화를 하는 경우도 있긴 하지만 컴파일러를 믿기보다는 스스로 코드를 짜 주는 게 낫지요

개인적으로는 ss 길이가 고정이라면 이런 코드를 씁니다

for (int i = 0, n = strlen(ss); i < n; ++i)
//혹은
for (int i = 0; ss[i]; ++i)
  • 2016년 02월 04일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close