printf 의 파라메타 내용
글쓴이: oprsystem / 작성시간: 수, 2004/03/17 - 8:53오전
안녕하세요
int mon_printf(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) char *fmt; int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12; { int ret; monLock(); ret = _printf(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); monUnlock(); return(ret); }
이런식으로 구현 되 있는 printf 가 있습니다.
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12;
이런식으로 변수를 선언하면 전역 변수가 되는것인지 어떤건지 확실히 모르겠습니다.
그리고 _printf 의 구현도 가변인자 방식이 아니라 고정 파라메타 방식처럼 보이는데 사용 할때는 일일이 파라메타13개를 다 넣는게 아니라 를 일반 printf 처럼 가변 파라메타 방식으로 사용하는것이 궁금합니다..
답변 부탁 드립니다.
:o
Forums:
Re: printf 의 파라메타 내용
변수 선언을 Pre-ANSI C로 하시네요. 참고 서적을 ANSI-C에 맞춰진 것으로
바꾸세요.
그리고, 전역변수가 되지 않습니다.
가변 파라메터에 대해서는 역시 책에 잘 나와있습니다.
C 언어 쓰신다면 The C Programming Language 한권은 꼭 갖추시기
바랍니다. 번역서도 있습니다. 8)
--
Minimalist Programmer
답변 감사 드립니다.pre-ansi-C 군요.. 제가 잘못 알았습
답변 감사 드립니다.
pre-ansi-C 군요.. 제가 잘못 알았습니다.
파라메타 입력의 선언인데.. 전역 변수라고 생각해 버렸습니다. 지적 고맙습니다.
그리고 제가 또하나 궁금한 점은 가변파라메타에 대해서가 아니라 어찌 해서
_printf(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
이 부분이 가변 파라메타처럼 사용되는가 하는 점 입니다.
감사 합니다.
황혼보다 어두운 자여
내 몸에 흐르는 피보다 더 붉은 자여
시간의 흐름 속에 파뭍힌 위대한 그대의 이름을 걸고 나 여기서 어둠에 맹세하노라
우리 앞을 가로막고 있는 모든 어리석은 자 들에게
나와 그대의 힘을
위대한 파멸의 힘을 보여줄 것을
위의 bookworm(책벌레?^^) 님이 지적하셨듯이, Pre-ANSI
위의 bookworm(책벌레?^^) 님이 지적하셨듯이, Pre-ANSI C, 즉 옛날 방식이죠.. C 처음 나올때쯤(아마 20~30년전쯤) parameter를 저런 방식으로 썼었죠. 물론 전역변수는 아니죠.
그렇다면 가변파라메타랑 동등한 방식이라는 말씀이시지요?그렇다면 고
그렇다면 가변파라메타랑 동등한 방식이라는 말씀이시지요?
그렇다면 고정파라메타 수를 컴파일러가 검사 하는건가요?
황혼보다 어두운 자여
내 몸에 흐르는 피보다 더 붉은 자여
시간의 흐름 속에 파뭍힌 위대한 그대의 이름을 걸고 나 여기서 어둠에 맹세하노라
우리 앞을 가로막고 있는 모든 어리석은 자 들에게
나와 그대의 힘을
위대한 파멸의 힘을 보여줄 것을
1. ANSI 이전의 C 는 아규먼트 타입검사를 안했으며 2. 심
1. ANSI 이전의 C 는 아규먼트 타입검사를 안했으며
2. 심지어 아규먼트의 갯수도 검사 하지 않았습니다. -- 이건 가변인자의 경우 지금도 마찬가지 --
3. 그리고 아규먼트를 보통 sizeof(int) byte 씩 스택에 쌓아놓고 함수 호출한다는걸 이용한..
결코 권장할 만한 방법이 아닌.. 트릭입니다.
어짜피 C의 가변인자 자체가 타입검사가 불가능한 취약점을 가지고 있긴 하지만,
저런 방법은 그것보다 더 나쁩니다.
아규먼트 갯수도 12개로 제한되는군요.
(그리고 실수로 그 이상을 썼다고 해도 컴파일 타임에 잡아주지도 못하고..)
어지간하면 stdarg 의 매크로들을 이용하도록 하세요..
답변 감사 드립니다.아이디가 많이 보던 아이디라..무한대전
답변 감사 드립니다.
아이디가 많이 보던 아이디라..
무한대전 테스토스님 맞으시죠? ^^*
또그 잡던 기억이 아련히~~
황혼보다 어두운 자여
내 몸에 흐르는 피보다 더 붉은 자여
시간의 흐름 속에 파뭍힌 위대한 그대의 이름을 걸고 나 여기서 어둠에 맹세하노라
우리 앞을 가로막고 있는 모든 어리석은 자 들에게
나와 그대의 힘을
위대한 파멸의 힘을 보여줄 것을
댓글 달기