2012-06-18 2 views
-1

명세서에서 연산자를 생략하면 다음과 같습니다 : while(foo) 컴파일러가 while(foo != NULL || *foo != '\0' || foo != 0) 또는 while(!foo) 또는 이와 비슷한 형식으로 컴파일러를 설정합니까?컴파일러는 while (foo)를 어떻게 번역합니까?

어떻게 실제로 할 수 있습니까?

+1

어셈블리 코드 생성 또는 의미에 대해 묻고 있습니까? – lvella

답변

7

while (condition)은 0이 아닌지 확인합니다. condition은 0이 아닙니다.

따라서이 두 동일합니다

while (foo) 
while (foo != 0) 
+0

그러나 어셈블리 코드 생성에 약간의 차이가 있습니까? 내가 말하길, 하나는 다른 것보다 더 빠릅니까? 첫 번째 또는 두 번째 코드 인 C 응용 프로그램에서 무엇을 사용합니까? – Jack

+1

@Jack : 그들은 동일한 기계 코드를 생성 할 것입니다. 그것은 개인적으로 선호하는 것입니다. 변수가 부울 조건을 나타내는 것이 확실한 경우를 제외하고는 항상 while (foo! = 0)을 명시 적으로 사용합니다. 'while (isSunny)'. –

+0

대단히 고마워! – Jack

1

NULL, '\ 0'0 기능적으로 동일하며, 그들 만이 다른 유형에 사용하고 있습니다. foo는 포인터 인 경우

foo이 그렇다면, 예를 들어, int로는, while (foo)while (foo)는 컴파일러는 않았지만, 그 foo는 점에 값을 확인하지 등 while (foo!=NULL)

을 의미 while (foo!=0)

을 의미한다.

관련 문제