의미없는 do while 문
글쓴이: hwandori / 작성시간: 수, 2004/09/29 - 9:15오후
커널 코드를 보면 매크로 중에
do { } while (0)
이러한 do-while문이 있습니다. 이 의미없는 문의 뜻은 무엇인지 알고
싶습니다.
덧붙여 pgd_t나 pte_t와 같은 타입을 왜 멤버하나만 갖는 구조체로 정의
되어있는지도 알고 싶습니다. 그냥 멤버로 정의되어있는 타입으로
정의할때와 다른점은 어떤것이 있는지 알고 싶습니다.
typedef struct { unsigned long pte_low; } pte_t; typedef struct { unsigned long pmd; } pmd_t; typedef struct { unsigned long pgd; } pgd_t;
Forums:
do while(0)는 여러 statement로 되어 있는 code를 m
do while(0)는 여러 statement로 되어 있는 code를 macro안에 statement가 아닌 하나의 expression으로 넣고 싶을 때 사용합니다.
Taeho Oh ( ohhara@postech.edu ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Alticast Corp. http://www.alticast.com
[url]http://www.kernelnewbies.org/faq/[/
http://www.kernelnewbies.org/faq/
위 링크 가셔서 Why do a lot of #defines in the kernel use do { ... } while(0)? 제목의 글을 찾아 보시면 좀더 자세히 설명되어 있습니다. :)
정말 감사합니다. 궁금증이 해소되었네요..아래 두번째 질문도 있는데..^
정말 감사합니다. 궁금증이 해소되었네요..아래 두번째 질문도 있는데..^^;
[quote="KernelNewbies FAQ"][code:1]#defi
KernelNewbies FAQ에 있는 설명의 일부 코드인데요,
지나쳤던 부분인데 깊은 뜻이 있길래 테스트를 해보았습니다.
그런데 결과는, FAQ의 내용처럼 해석되는 것이 아니라
와 같이 해석되는 군요. 컴파일러는 gcc 3.2.2와 MSVC 7.1에서 테스트하였습니다.
매크로의 라인마다 '\'를 붙여주었기 때문에 자동으로 처리되는 것 같은데
리눅스커널에서 do { ... } while (0) 처럼 사용하는 것은 오래된
컴파일러의 잔재일까요:roll:
--
이덕희
[quote="lachesis"][quote="KernelNewbies
아무 인자없이 실행하면 AB가 출력되고
인자를 주고 실행하면 B가 출력되는데요..
gcc 3.2으로 컴팔했습니다.
죄송합니다.
무식한 실수를 저질렀네요 :oops:
성급히 테스트 하다보니 참인 조건만 가지고 테스트 해봤었네요.
MSVC 7.1에서도 혹시나 해서 테스트를 해보았으나,
역시 이와 같은 상황에서는 do { ... } while (0)문을 활용 해얄 것 같습니다.
이런 실수를 :-(
--
이덕희
do while(0) 이코드를 보면서 왜 이렇게 했을까 많이 고민해봤지만
do while(0) 이코드를 보면서 왜 이렇게 했을까 많이 고민해봤지만.. 도무지 답이 안 나왔었는데.. 좋은 정보 감사드립니다. ^^
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
두번째 질문에 대하여..
i386 아키텍처에서 PAE (Physical Address Extension) 을 사용하는 경우
페이지의 주소값으로 36 비트를 사용하기 때문에
하나의 long 변수로는 모든 주소값을 저장할 수 없기 때문입니다.
이러한 경우를 고려하여 코드를 유연성있게 작성한 것이라고 생각됩니다.
do{..}while(0)문을 보고 왜 이렇게 쓸데없는 짓(?)을 할까
do{..}while(0)문을 보고 왜 이렇게 쓸데없는 짓(?)을 할까 생각했던 적이 많았는데 이런 깊은 의미가 있었네요..
정보 감사합니다.
저는 아무리 읽고 또 읽어봐도 무슨 말인지 이해가 잘 가지 않습니다.
저는 아무리 읽고 또 읽어봐도 무슨 말인지 이해가 잘 가지 않습니다.
do..while문을 사용하는 이유는 여러 라인에 걸쳐 표현되는 매크로 함수를
일일히 '\' 를 주지 않고 한번에 사용한다는 말씀인가요?
초보인 저한테는 정말이지 감이 안옵니다.
죄송하지만 좀더 쉽게 설명해주셨으면.... :oops:
[code:1]#define MACRO(x) aaa&#
위 코드는 preprocessing을 거치면
이 되서 aaa(x)부분만 if에 걸리게 됩니다.
하지만 do while로 묶어주면 그렇지 않죠.
[code:1]#include <stdio.h>#d
여기서 FOO(x)뒤에 ;을 붙여보았더니
AB가 인자에 상관없이 무조건 출력되더라구여....
;이 두개이기때문에 에러나야 하지 않나여???
우리 모두 리얼리스트가 되자. 그러나 가슴에는 불가능한 꿈을 갖자!!!
[code:1]int main(int argc,char *ar
gcc에서는 이렇게 변환되는군요
gcc -C -E로 하신후에 처리되는거 보시면 아실겁니다.
그러네요....궁금증이 풀렸습니다.감사^^
그러네요....
궁금증이 풀렸습니다.
감사^^
우리 모두 리얼리스트가 되자. 그러나 가슴에는 불가능한 꿈을 갖자!!!
으음...저도 예전에 저런 매크로에 관한 문제를 해결했었는데..어
으음...
저도 예전에 저런 매크로에 관한 문제를 해결했었는데..
어떻게 했는지 다시 뒤져 보니 이렇게 썼더군요.. ㅎㅎ
ㅡ_ㅡ;
ncubic
ncubic
중복이 되는 주제입니다...검색키워드를 무엇을 해야 찾을 수 있는지.
중복이 되는 주제입니다...
검색키워드를 무엇을 해야 찾을 수 있는지... --;
링크 걸려고 했는데...잘 안되네요...
댓글 달기