전통적으로 리턴값은 accumulator register(x86의 경우, AX/EAX)에 넣어 리턴하는게 보편적입니다.
위 수식의 경우, EAX에 있었던 최종값을 리턴했다고 볼 수 있고,
최종수식의 결과값이 될것으로 예측됩니다. 문장이 몇개 더 있다고 가정했을때도, 최종 결과(EAX의)가 리턴된다고 보는게 맞을 것이라는...
이 값이 보편적이겠지만, 믿을 수야 없겠지요. 이런 문장을 기술하는 것은 그리 좋아 보이지 않습니다.
또, const typeof( ((type *)0)->member ) * 도 그냥 void * 면 충분할 것 같은데 왜 이렇게 썼을까요?
제 생각에 처음 문장은 필요없는 것으로 보입니다. ptr의 형이
typeof( ((type *)0)->member )* 라는 것은 반드시 만족해야 할 전제조건이거든요.
그렇지 않으면 매크로의 의미가 없어지니까요. 처음 문장이 있다고 해서 더 안전해지는
것도 아니고요. 다음 코드로 충분할 듯 합니다.
원형을 함께 보여주셔야 용도를 설명해 드릴 수 있을 것 같습니다.
원형을 함께 보여주셔야 용도를 설명해 드릴 수 있을 것 같습니다.
[url=http://bbs.kldp.org/viewtopic.php?t
expression statement 참고하세요.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
감사합니다. ^^
감사합니다.
조회해보면 답이 있을것도 같았는데..
뭐라고 조회해야할지 키워드가 안떠오르더라구요...^^;;
대략
a = ({b = 3; b + 4;})
{} 함수라고 생각하시고
b+4는 return값이라고 생각하면 되지 않을까요?
결과적으로 a = 7; 과 같은 코드 아닌가요?
같은 매크로 보다가 궁금한게 있어서.
같은 매크로에 대한 이야기라서 그냥 여기다 질문을 추가 합니다.
container_of 라는 매크로가 있는데요. 다음과 같습니다.
매크로 내용은 보면 아시겠지만, 어떤 구조체 내에 있는 변수의 포인터를 이용하여 구조체의 포인터를 구하는 것입니다.
그런데 이때 왜 __mptr 이라는 변수를 굳이 선언해서 사용하는지 모르겠습니다.
변수 선언을 하지 않고 그냥 두번째 스테이트먼트만 으로 충분할 것 같거든요.
또, const typeof( ((type *)0)->member ) * 도 그냥 void * 면 충분할 것 같은데 왜 이렇게 썼을까요?
전통적으로 리턴값은 accumulator register(x86의 경우,
전통적으로 리턴값은 accumulator register(x86의 경우, AX/EAX)에 넣어 리턴하는게 보편적입니다.
위 수식의 경우, EAX에 있었던 최종값을 리턴했다고 볼 수 있고,
최종수식의 결과값이 될것으로 예측됩니다. 문장이 몇개 더 있다고 가정했을때도, 최종 결과(EAX의)가 리턴된다고 보는게 맞을 것이라는...
이 값이 보편적이겠지만, 믿을 수야 없겠지요. 이런 문장을 기술하는 것은 그리 좋아 보이지 않습니다.
Re: 같은 매크로 보다가 궁금한게 있어서.
제 생각에 처음 문장은 필요없는 것으로 보입니다. ptr의 형이
typeof( ((type *)0)->member )* 라는 것은 반드시 만족해야 할 전제조건이거든요.
그렇지 않으면 매크로의 의미가 없어지니까요. 처음 문장이 있다고 해서 더 안전해지는
것도 아니고요. 다음 코드로 충분할 듯 합니다.
댓글 달기