[완료] C언어에서 함수 정의하는 경우
글쓴이: kite7 / 작성시간: 월, 2007/03/05 - 12:02오후
qmail 소스를 보니 아래와 같은 코드가 있었습니다.
void alloc_free(x) char *x; /* <----- 이부분입니다 */ { if (x >= space) if (x < space + SPACE) return; /* XXX: assuming that pointers are flat */ free(x); }
이 경우 인자인 X의 형이 괄호 안에 정의되어 있는 것이 아니라
따로 적어 놨더군요.
제가 경험이 별로 없어서 이런 형태의 함수 정의는 처음 봤습니다.
원래 이런 형태도 가능 한것인가요?
Forums:
ANSI C 표준이 나오기
ANSI C 표준이 나오기 이전 구석기시대에 사용하던 C입니다. 되기는 됩니다.
저렇게 쓰면 alloc_free에 인자를 뭘 넣고 부르든, 안 넣든, 열두 개를 넣든, 절대 컴파일러가 타입 체킹을 하지 않는다는 대단한 장점(???)이 있으므로, 최소한의 양심이 있는 프로그래머라면 90년대 이후로 저런 코딩은 하지 않습니다. :P
어감(? )이 재미있으시네요 ㅋㅋ
답변 감사하구요^^"
음, 전 Qmail쫌 되면 코딩 스타일 같은 것이 뭔가 교과서 같을거 같아서 보려고 했었는데.
만드신 교수님이 좀 옛날 분이라서 그런지.. 탭사이즈도 2개고..
함수 정의도 옛날 식으로 하시는군요...
하긴 실력이 있으시니깐 타입체킹 따위는 필요 없으실지도..
갑자기 예전 knuth 교수의 "돌에 글씨를 새기듯이 프로그래밍을 한다" 는 말이 떠오르네요..
그런 분들은 .. 오류있는 코드는 무의식적으로 안만들어지겠죠...
...
음 어감이 재밌다니 감사합니다. 저의 아방가르드한 언어감각을 이해해 주는 사람들이 많지 않은데.. -.-
> 하긴 실력이 있으시니깐 타입체킹 따위는 필요 없으실지도..
> 갑자기 예전 knuth 교수의 "돌에 글씨를 새기듯이 프로그래밍을 한다" 는 말이 떠오르네요..
> 그런 분들은 .. 오류있는 코드는 무의식적으로 안만들어지겠죠...
음, 제 생각은 좀 다릅니다. 코드는 움직이는 거죠. 네. --;
세줄짜리 코드라도 언젠가는 디버깅을 해야 하고, 디버깅/유지보수할 사람이 자기가 될 거라는 보장은 없습니다. 따라서 자신이 아무리 버그를 안 낼 자신이 있다 해도 "난 자신있어!" 하면서 컴파일러가 제공하는 타입 체킹 등의 기능을 무시하는 프로그래머는 제 생각에 아주 무책임한 프로그래머입니다. 직장 동료로 마주치고 싶지 않은 타입이죠.
나중에 그 코드를 들여다보고 고칠 사람도 생각해 줘야죠. -_-
- jick
kite7 씀: 하긴
저 역시 이 말에는 동의하기 좀 힘듭니다. 100% 완전한 소프트웨어는 없다는 말이 생각이 납니다. 제 아무리 뛰어나고, 엄청난 경력을 소유하신 분들이라 하더라도, 코드를 짜면서 실수란 하기 마련입니다. 또한 다른 분이 말씀하신 것처럼 평생 그 분이 해당 코드를 관리하실게 아니라면, 아무래도 그 코드를 이어 받거나, 혹은 같이 일할 사람들을 생각해주는 센스도 필요하다고 생각됩니다. ㅎㅎ
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
[parkhw00@poor ~]$ cat
흠... 정말 경고를 안내는군요...
심각하게 생각하실 필요가 없어요..
저도 처음에 저게 뭐지? 했는데..
옛날식 표현방법이더라구요.. 여러 파라메터를 정의하면 아래로 쭉 쓰면 되겠죠?
그냥 요즘은 넣어서 쓰는게 좋습니다.
윗분께서 말씀하신것과 같은 어의 없는 error 때문에 골치썪는것 보다는..ㅋ
수고요~
교육 일선에 계시는
교육 일선에 계시는 분이 옛날 스타일로만 가르치는건 좀 이상하네요.
두가지를 다 알려주고 그중 한가지를 쓴다면 문제가 덜 될듯한데요.
일단 교수님께 문제제기를 해보는게 좋지 않을까 생각합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
질문자는
질문자는 http://en.wikipedia.org/wiki/Daniel_J._Bernstein을 말씀하시는 것 같습니다.
qmail 의 경우 함수
qmail 의 경우 함수 정의와 선언에서 모두 비원형을 사용하기 때문에
적용되지 않는 이야기지만, 함수 정의를 비원형 방식을 사용했다고 해서
함수 호출시 매개변수의 개수, type 에 대한 검사가 항상 이루어지지
않는 것은 아닙니다. 함수 호출시에 필요한 모든 검사를 수행하면서도
하위 호환성 유지를 위해 비원형 정의를 사용할 수도 있습니다. 따라서
함수 정의 형태만 놓고는 함수가 호출될 때 매개변수-인자 검사가
올바르게 수행되지 않는다고 단정할 수는 없습니다.
함수 선언을 원형으로 적절히 제공할 경우 함수의 비원형 정의-원형
선언의 호환 규칙에 의해 필요한 건 다 검사됩니다.
함수 선언의 경우 간단한 매크로로 원형/비원형 전환이 쉽지만, 함수
정의는 그렇지 않아 일단 비원형으로 정의한 후에 원형 선언과의 호환
검사를 통해 원하는 검사가 모두 이루어지도록 하기 위해 아직도 종종
비원형 함수 정의를 사용하고 있습니다. 물론, 일반적인 상황에서 이는
아주 (매우 심하게) 구식인 implementation 을 고려한 것입니다 - 물론,
비원형 선언/정의 자체가 지양되어야 하는 마당에 그런 구식
implementation 을 고려할 필요가 있는지에는 회의적입니다.
* PARAM 매크로 사용에 실수가 있어 수정했습니다.
--
Jun, Woong (woong at icu.ac.kr)
Web: http://www.woong.org (서버 공사중)
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
조언주신분들 감사합니다.
샘플 소스까지 보여주시고 답해주신 분들 모두 감사드립니다^^"
전웅님 책은 사놓고 아직도 1/10밖에 못봤네요. ㅋ ㅡㅡ;
댓글 달기