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

조회수 2790회

소스코드

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

발생하는 문제 및 실행환경

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

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

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

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

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

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

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

    for (int i = 0, n = strlen(ss); i < n; ++i)
    //혹은
    for (int i = 0; ss[i]; ++i)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)