C나 C++에서 자주 쓰는 for loop을 #define으로 정의해서 써본 적이 있는 사람 저 말고 또 있나요?
글쓴이: dl3zp3 / 작성시간: 토, 2009/08/01 - 12:30오전
옛날에 C++를 한창 배우던 시절에
#define FOR(x,n) for(int x=0;x<(n);x++)
위와 같은 정의를 즐겨쓰곤 했습니다. for (int x =0, x<(n), x++)를 항상 다써주기가 귀찮아서...
그리고 SUM과 MAX라는 메크로도 정의해서 쓰곤 했는데, 예를 들어 FOR와 SUM을 같이 써서
SUM(FOR(i,n), a[i], sum)
는 C전처리기를 거쳐서
sum = 0; for(int i = 0; i< n; i++){ sum += a[i] }
가 되도록 정의했습니다.
자주 쓰는 for loop의 형태에 따라서 FOR, FOR1, FOR2등을 정의하고, 이것을 SUM, MAX, MIN, PRODUCT과 필요할 때마다 같이 쓰곤 했습니다.
Forums:
매크로 닥질은 정말
매크로 닥질은 정말 무궁무진하고 사람에 따라 정말 많이 다르지요...
제가 본 최고의(최고로 다양하게 쓰는) 매크로는 SimpleScalar라는 CPU Core Simulator 였습니다...
CPU의 각 OPCODE들이 해야 하는 일을 거의 매크로로 정의해 놓았는데, 거의 머... 지옥입니다...
컴퓨터 아키텍처를 공부하는 학생들에게는 축복의 시뮬레이터지만, OPCODE를 변경하는 건 최대한 자제해야죠...ㅋㅋㅋ
그런데, 저렇게 매크로를 짜두면(언어가 지원하는 간단한 문법들에 대해서) 다른 사람이 보기 힘들어 하지 않던가요?
혼자 쓰는 프로그램이라면야 상관없지만, 매크로 만날 때마다, 저게 뭔지 파악하기 위해서 찾아보는 건 글쎄요...
같이 일하는 환경에서는 그다지 바람직하지는 않은 거 같은데요...
물론 제 의견입니다...
Linux Kernel 이요..
많은 곳에서 컨벤션을 이용해 for each형태로 실수를 줄여둔걸 관찰할 수 있었습니다.
제가 느낀 가장 안타까운 고생이 이런 형태입니다.
openTTD소스코드에서
openTTD소스코드에서 그런식으로 루프를 재정의한걸 본게 생각나네요
근데 좋은 방법인가는 약간 의문이 듭니다. 왜냐면 타이핑하는데는 좀 편할지몰라도. 읽는데 조금 불편할수도있거든요.
이거 무슨메크로인지 한번 lookup을 해가면서 읽어야되니 ㅡㅡ;
마크로는 역시 LISP
if 의 반대인 unless 입니다.
defmacro unless [condition do-it]
('if condition nil do-it)
C 에서는 불가능하겠죠?
#define unless(b) if(!(b))
#define unless(b) if(!(b)) 하면 되지 않을까요?
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
if 문을 치환하는
if 문을 치환하는 것은 되는군요.
문제는 조건문과 실행문을 같이 묶어 마크로를 만들 수 있는가? 인데요.
잘 모르겠네요.
머... 대충 이런
머... 대충 이런 식이면 되지 않을까요?
SimpleScalar라는 시뮬레이터에서 일부 발췌해 봤습니다...
솔직이 매크로질 하자면 한이 없겠죠...
예를 좀 잘못
예를 좀 잘못 드신듯합니다.
syntax를 새로 만드는 것과 치환에 기반한 전처리와는 (하늘과 땅 만큼의 엄청난) 차이가 있죠. ^^;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
Textmate나 EMACS의
Textmate나 EMACS의 YASnippet 과 같은 스니펫 툴을 쓰시는것이 더 좋을것 같습니다.
======= ======= ======= ======= =======
홈즈, 그만 좀 따라다니게나.