:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
07/04/12 20:57
#define문을 이용하세요.
#define MULT(x,y) ((x) * (y)) 이런 매크로를 작성하면 됩니다. define문은 뒤에 세미콜론 안 씁니다. 값 확인하는 건 printf문으로 대충 하나 짜 주시면 됨.
07/04/12 21:25
C 언어는 사실 2주면 배울 수 있습니다. 다만 컴퓨터의 기본 개념은 이해하는 데 좀더 시간이 걸립니다. 언어를 공부할 때 어려움을 겪는 까닭은 아마도 컴퓨터의 동작 원리를 잘 모르시기 때문인 것 같습니다. 논리회로 과목을 같이 공부하는 게 보통 도움이 된다고 봅니다.
소스 코드는 기계어로 번역되어야 수행될 수 있습니다. 기계어는 고급 언어보다 더 단순한 명령어 집합입니다. 극단적으로 소스 코드는 곱셈을 지원하지만 기계어는 덧셈이나 비교연산만 지원할 수도 있습니다. 그 경우 컴파일러는 소스 코드의 곱셈 기호를 읽어서, 반복적인 덧셈으로 번역해 주어야 합니다. 하지만 프로그래머는 여전히, 소스 코드의 곱셈을 자유롭게 사용합니다. 말하자면 컴파일러는 프로그래머에게 고급 언어라는 추상을 제공합니다. function 역시 그런 추상의 하나입니다. 고급 언어에는 있지만, 기계어에는 보통 없습니다. 하드웨어의 기계어에 그런 고급 언어가 없는 까닭은, 그렇게 해야 하드웨어 디자인이 현실적으로 간단해지기 때문입니다. function은 C에서 일을 divide and conquer, 모듈 단위로 잘개 쪼개어 처리하기 위해서 필수적인 도구입니다. 앞서 언급한 바 기계어는 보통 지원하지 않습니다. 따라서 컴파일러는 function의 코드를 기계어로 작성한 뒤, function을 부르는 부분을, 그 코드가 있는 부분으로 jump 하는 종류의 코드로 바꾸게 됩니다. 패러미터를 넘기거나 리턴값을 받거나 scope 문제를 처리하기 위해 보통 function에서 사용하는 변수나 인수를 위해 메모리 영역의 일부를 특별히 관리하는데, 이 관리 역시 기계어로 이루어지기 때문에 대개 function은 overhead가 큽니다. 매크로는 function처럼 module 단위로 일을 처리하되, overhead는 크지 않게 하는 방법입니다. function은, 실제로 기계어로 단 하나의 모듈만 작성되고, function을 call할 때, 그 기계어 코드가 있는 주소로 점프하는 방식이지만, 매크로는 컴파일러가 소스 코드를 기계어로 바꾸기 직전에, 모든 매크로를 정의된 source로 바꿉니다. 즉 MULT(x, y) 꼴로 등장하는 모든 소스 코드를 ((x)*(y))로 바꾸게 됩니다. 프로그래머에게 보이기는 매크로 쪽이 좀더 쓰기 복잡하다는 것 외에 펑션과 다를 바 없지만, 기계에게는 함수 호출 부분을 일일이 풀어서 써놓은 것이나 같은 효과를 냅니다.
|