C에서 파라메터에 복수개의 함수 지정
글쓴이: gauibauibo / 작성시간: 목, 2009/05/28 - 4:44오후
소스 분석중에 아래와 같은 코드가 있는데
char Test[] = "Test string" unsigned char slide[512]; void message(unsigned char* buf, unsigned log size, int flag) { printf("buf: %s \n", buf); printf("size: %d \n", size); printf("flag: %d \n", flag); return; } int main(void) { message( (unsigned char*)("test"), (unsigned long)(sprintf ((char*)slide, (char*)Test), strlen((char*)("test"))), (flag) ); return 0; }
message 함수의 두번째 파라메터의 동작원리가 이해가 되지 안습니다.
Forums:
(unsigned long)(sprintf
는 sprintf 라는 함수를 수행하고 리턴값을 다시 파라메터로 쓴 것 뿐입니다.
로 호출한것과 동일한 효과입니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
코드를 보시면
코드를 보시면 아시겠지만
파라메터가
되어 있습니다.
여기서 strlen()이 sprintf()의 인자로 사용된게 아닙니다.
그리고 코드를 실행하면 파라메터 size는 sprintf()의 리턴 값이 아니라 strlen()의 리턴값을 받아 옵니다.
message 의 parameter 라고
message 의 parameter 라고 하셔서 속았습니다..
, operator ( comma operator ) 에 대해 찾아보시면 잘 아실 수 있습니다.
(expr) , (expr) 의 경우 expr 을 모두 평가한뒤, 왼쪽 expr 을 버리고 오른쪽 expr 만을 취합니다.
최종적으로 둘다 수행은 된뒤 strlen 값만을 message 함수의 파라미터로 쓰게 되겠지요.
Neogeo - Future is Now.
Neogeo - Future is Now.
댓글 달기