2014-05-16 3 views
0

OpenSubtitles 웹 사이트에서이 코드 라인을 보았습니다. 단순한 (이 행을 제외하면) 알고리즘을 사용하여 영화에서 해시 값을 생성합니다.C의 라인에 이상한 점

코드의 라인은 이것이다 :

아무 생각이 ... 모든 작업이 대신 내가이 모든 년을 잘 알고 있던 형식의,의 내부에 발생하지
for(uint64_t tmp = 0, i = 0; i < 65536/sizeof(tmp) && fread((char*)&tmp, sizeof(tmp), 1, handle); hash += tmp, i++); 

...

for (x=0; x<=5; x++) 
{/*do something here*/} 

아무도 여기서 무슨 일이 일어 났는지 설명 할 수 있습니까?

+0

은'FREAD ((의 char *)를 및 TMP,는 sizeof (TMP), 1, 처리) '부분이 더 FREAD'로 기록 (TMP, sizeof 연산자의 tmp, 1 , handle);'fread()'는'void *'를 취하고'sizeof'는 함수가 아니기 때문에. – unwind

답변

1

당신이 이런 식으로 쓰면 이해하기 쉬울 수 있습니다 :

for(
    uint64_t tmp = 0, i = 0; 
    i < 65536/sizeof(tmp) && fread((char*)&tmp, sizeof(tmp), 1, handle); 
    hash += tmp, i++) 
{ 
} 

그것은 두 개의 변수를 선언는, 각 반복에서 두 개의 변수를 수정 (안 같은 두하지만), 그리고에 함수 호출을 계속 조건. 그것은이 표현하는 더 간결한 방법 :

uint64_t tmp = 0; 
uint64_t i = 0; 
size_t res; 
while (1) 
{ 
    if (i >= 65536/sizeof(tmp)) 
     break; 
    res = fread((char*)&tmp, sizeof(tmp), 1, handle); 
    if (!res) 
     break; 
    hash += tmp; 
    ++i; 
}