[질문] 이런 엽기적인 C 코드가...??
글쓴이: splendor / 작성시간: 목, 2004/01/29 - 9:41오후
다음은 C코드 중 일부인데요.
참고로 이 코드는 리눅스에서 돌아가는 Java Virtual Machine의 소스코드입니다. 파일에 대한 처리를 native 함수들을 이용해서 하는 부분입니다.
JNIEXPORT jboolean JNICALL Java_java_io_UnixFileSystem_createDirectory(JNIEnv *env, jobject this, jobject file) { jboolean rv = JNI_FALSE; WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) { if (mkdir(path, 0777) == 0) { rv = JNI_TRUE; } } END_PLATFORM_STRING(env, path); return rv; }
중간에
WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) { => 이 라인과
} END_PLATFORM_STRING(env, path); => 이 라인이 이해가 가지 않습니다.
이런 문법도 있나요?
제가 C를 깊이 알지 못해서 잘 모르겠습니다.
File attachments:
첨부 | 파일 크기 |
---|---|
exception.c | 724바이트 |
exception.h | 1.52 KB |
Forums:
있을 수 있느냐고 물으신다면 물론 있을 수 있습니다 :)전체 소스가
있을 수 있느냐고 물으신다면 물론 있을 수 있습니다 :)
전체 소스가 없어서 각각이 무엇인지는 모르겠지만, 찬찬히 뜯어보시면 별거 아닐 것 같습니다.
모양새가 낯설어서 그러신듯 한데 LISP같은 함수형 프로그래밍 방식이 저런 식인 것으로 알고 있습니다.
다른 사람에게 물어보니 매크로일 것 같다고 하네요. while 문 같
다른 사람에게 물어보니 매크로일 것 같다고 하네요.
while 문 같은 스타일의 매크로일 것 같다고...
전 Java프로그래머라 C 매크로는 아주 단순한 것밖에 몰라서...
저런식으로 매크로가 쓰일 수도 있는 모양인가보군요.
매크로를 보면 알 겠죠..
JNI폴더를 만들어 보고 만들어지면 JNI가 TRUE가 된다는 내용 같군요...
함수 이름에서 뭐하는 것인지 대충 알 수 있을 것 같네요...
-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................
하하... 매크로로 C에서 try-catch 도 만들어 쓰는데, 엽기적일
하하... 매크로로 C에서 try-catch 도 만들어 쓰는데, 엽기적일것까지 있나요. :-)
[quote="saxboy"]하하... 매크로로 C에서 try-catch
전에도 어떤분이 그런 매크로로 만든 try-catch문 말씀하신것 같은데 그 매크로 소스를 볼 수 있는곳을 알 수 있을까요? 어떻게 될 것 같긴 한데 한번 구경이나 해봤으면 합니다.
웃어요^,.^;
누가 저 위와 같은 스타일의 간단한 매크로를 예제로 올려주실 수 없나요?
누가 저 위와 같은 스타일의 간단한 매크로를 예제로 올려주실 수 없나요? 저는 내공이 모자라서 도대체 어떤식으로 저런 매크로는 만드는지 잘 모르겠습니다. T_T
그나저나 KLDP BBS는 사용자분들의 활동이 무척 왕성하신가보내요. 답글들이 바로바로...^^;;
비슷한 매크로 하나..
지금도 게임 회사에 다니고 있긴 하지만, 예전에 W모사에서 온라인게임개발팀에 있었습니다. 서버쪽의 서브였는데, 당시에 메인 프로그래머께서 매크로를 많이 사용하셨습니다. 좀 난해하긴 하더군요. ㅡㅡ; 당시의 소스를 조금만 인용해보겠습니다.
loop는 다음과 같이 정의되어 있습니다.
간단하게 다음과 같이도 많이 사용했습니다.
전략 시뮬레이션 게임 프로그래밍 책에 있던걸로 기억합니다.찾아보려
전략 시뮬레이션 게임 프로그래밍 책에 있던걸로 기억합니다.
찾아보려 했으나.. 책을 친구한테 빌려준걸 깜빡했네요 -_-a
아마도 내부에서 사용하는 스트링 포맷을 C API로 넘기기 위해서 pat
아마도 내부에서 사용하는 스트링 포맷을 C API로 넘기기 위해서 path 포인터에 C 문자열을 담을 수 있도록 할당하고 문자열을 복사한 다음 끝나면 해제하는 매크로 같습니다.
근데 ids 라는 것은 file 객체 안에 있는 필드인가보죠? 그냥 그 함수만 보고서는 이렇게 유추할 수 밖에 없네요...
macro를 잘 사용하면 lisp코드를 좀 흉내낼 수 있습니다.lis
macro를 잘 사용하면 lisp코드를 좀 흉내낼 수 있습니다.
[/code]lisp의 with-open-file macro를 대강만 흉내내어 보면(좀 다르지만) 다음과 같습니다. (gcc 에서만 될겁니다.)
올리신 코드도 이것과 비슷할겁니다.
macro 를 써서 다른 언어 흉내내는 것은 안 좋은 방법아닌가요?
말릴 수는 없겠습니다만...
단지 style 의 문제가 아닌 해악이라고 생각해서... -_-a
일단 책에 있는것..[code:1]#define BeginSt
일단 책에 있는것..
사용은
물론
{ } 로 묶어도 됩니다.
macro의 사용은 개개인의 의견차이겠지만, 게임 프로그래밍 쪽에서는 많이 쓰이는 것으로 알고 있습니다.
[quote]전에도 어떤분이 그런 매크로로 만든 try-catch문 말씀
C로 try/catch를 구현하려면 setjmp/longjmp 함수를 알아야 합니다.
참고해보시라고 제가 만들었던 try/catch 에 대한 허접 소스를 올립니다.
구현하면서 제가 참고했던 레퍼런스를 알려드리면 더 좋겠지만...
그게 뭐였는지가 기억이 안납니다...
댓글 달기