책에 있는 프로그램 가운데 clrscr()이란 게 있더군요
프로그램을 돌려 보니까 그것 때문에 에러가 나는 것은 아닌데
경고문이 자꾸 뜨던데...뭔가요?
여러 번 나와서 궁금해요...
clrscr()이면... dos text mode에서 화면 지우는것 아닌가요?
turbo-c(borland-c)계열이면 conio.h일겁니다.
ms-c계열은...
옛날일이라 잘 기억이 안나네요...
그럼 이만...
--
!==========================================!
NAME : Youn, Jun Ho
E-MAIL : sof...@3soft.com
HANMAIL : sof...@hanmail.net
OFFICE : 02-3772-0361
@..@
(----) sof...@3soft.com
( >__< ) dyaknow.com Team
^^ ~~ ^^ 3 Soft Inc.
!==========================================!
"ipse" <sw5...@pyunji.andong.ac.kr> wrote in message
news:8i7f8j$b83$1...@news2.kornet.net...
clrscr() 함수는 dos mode 상에서 화면을 지워주는 함수 맞습니다.
그리고 turbo-c(borlad-c) 컴파일러 계열에서만 지원하는 함수 입니다.
conio.h 파일에 함수 정보가 들어 있습니다.
따라서 #include <conio.h> 라는 문장이 있어야 하겠지요.
그리고 ms 계열의 컴파일러(물론 DOS 모드)에서 위와 유사한 역할을
수행하는 함수는 저도 기억이 가물 가물 하지만 ㅡ.ㅡ
_clearscreen() 이었던거 같습니다.
마지막으로 clrscr(), clearscreen() 두 가지 함수 모두 ANSI C 표준이
아닙니다. 따라서 다른 컴파일러와 소스 레벨에서 호환이 되지 않습니다.
되도록 사용하지 않는게 좋습니다.
--
이동호 (메일을 보내시려면 ID의 NOSPAM 부분을 제거해 주세요)
항상 듣는 말이 ANSI표준에 맞추어서 프로그램을 작성하라는
말을 듣곤하거든요..
turboc에서는 clrscr()로 text모드의 화면을 지우는걸로 알고 있습니다.
하지만 이게 ANSI표준은 아닌것도 알고 있습니다.
어떤 씨언어 책을 보면 화면을 클리어하는 기능을
int86을 사용하여 인터럽트를 사용하여 작성해놓은 걸 보았습니다.
그럼 ANSI표준을 지킬려면 ANSI표준이 아닌함수들은 그 기능을
인터럽트 호출로 해결해야만(스스로 작성해야) 하는 건가요?
이러한 기능을 DOS 또는 BIOS 인터럽트를 이용해서 만들던지
아니면 직접 VRAM 접근을 하여 만들던지 개발자가 결정해야 할 일입니다.
UNIX에서도 화면지우기 라이브러리중 대표적인 것이 curses라는 것이
있습니다. 그러나 표준 라이브러리로 분류되지는 않지요.
예전에 제가 DOS에서 프로그램을 개발할 때는 VRAM을 이용한
curses 라이브러리를 만들어서 사용하였습니다.
LIBCURSE.LIB를 만들었던 것이지요.
그렇게해서 주 프로그램 소스는 UNIX에서 curses를 사용하는
프로그램과 동일한 소스로 구현이 되었고 UNIX에서나 DOS에서나
똑같은 소스를 컴파일만 하면 잘 돌았었지요.
안타깝게도 그당시 제가 만들어논 DOS용 라이브러리는 잃어버렸군요.
--
황보현
http://www.itplus.co.kr/newhome/etc/job.html
news://news.itplus.co.kr/itadvisor.java
news://news.itplus.co.kr/itadvisor.news
wjs <w...@dhr.rn>이(가) 아래 메시지를 news:8ia41t$1m3$1...@hiline.shinbiro.com에
게시하였습니다.
In article <8ia41t$1m3$1...@hiline.shinbiro.com>, wjs wrote:
>궁금한게 있어서 이렇게 글을 올립니다.
>
>항상 듣는 말이 ANSI표준에 맞추어서 프로그램을 작성하라는
>
>말을 듣곤하거든요..
>
>turboc에서는 clrscr()로 text모드의 화면을 지우는걸로 알고 있습니다.
>
>하지만 이게 ANSI표준은 아닌것도 알고 있습니다.
>
>어떤 씨언어 책을 보면 화면을 클리어하는 기능을
>
>int86을 사용하여 인터럽트를 사용하여 작성해놓은 걸 보았습니다.
>
>그럼 ANSI표준을 지킬려면 ANSI표준이 아닌함수들은 그 기능을
>
>인터럽트 호출로 해결해야만(스스로 작성해야) 하는 건가요?
>
>
--
송응규 (Eungkyu Song)
점점 폐인이 되어가는 나의 모습은...
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
mailto:eun...@sparcs.kaist.ac.kr
http://alsong.kaist.ac.kr/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
저는 아직까지도 Window(그것도 borlandc)를 못벗어나고 있습니다.
언젠가는 다른 OS에서 프로그램을 작성할 날이 오겠죠...
다시 한번 답변감사드립니다.
황보현 이(가) <5D025.650$XU4....@news2.bora.net> 메시지에서
작성하였습니다...
>화면지우기 기능 자체는 ANSI C 표준에 정의되어 있지 않을 것입니다.
>
>이러한 기능을 DOS 또는 BIOS 인터럽트를 이용해서 만들던지
>아니면 직접 VRAM 접근을 하여 만들던지 개발자가 결정해야 할 일입니다.
>
>UNIX에서도 화면지우기 라이브러리중 대표적인 것이 curses라는 것이
>있습니다. 그러나 표준 라이브러리로 분류되지는 않지요.
>
>예전에 제가 DOS에서 프로그램을 개발할 때는 VRAM을 이용한
>curses 라이브러리를 만들어서 사용하였습니다.
>LIBCURSE.LIB를 만들었던 것이지요.
>
>그렇게해서 주 프로그램 소스는 UNIX에서 curses를 사용하는
>프로그램과 동일한 소스로 구현이 되었고 UNIX에서나 DOS에서나
>똑같은 소스를 컴파일만 하면 잘 돌았었지요.
>
>안타깝게도 그당시 제가 만들어논 DOS용 라이브러리는 잃어버렸군요.
>
>--
>황보현
>
>http://www.itplus.co.kr/newhome/etc/job.html
>news://news.itplus.co.kr/itadvisor.java
>news://news.itplus.co.kr/itadvisor.news
>
>
>
>wjs <w...@dhr.rn>이(가) 아래 메시지를
news:8ia41t$1m3$1...@hiline.shinbiro.com에
>게시하였습니다.
ANSI C 표준에 정의되어 있지 않다는 것은, 말 그대로 언어 표준이 아니라
각 컴파일러에서 제공하는 확장 기능(extension)이라는 것이고, 그런
함수를 사용한 프로그램 소스를 다른 컴파일러에 가져다가 그대로 컴파일을
하려 하면 알아듣지 못할 수도 있다는 얘기입니다. 그 뿐이지, 그 이상도
그 이하도 아닙니다.
왜 clrscr()과 같은 함수는 ANSI C 표준에 정의되어 있지 않을까요?
그것은, 언어 자체에서 해결할 수 없기 때문입니다. 표준이 되려면 표준을
따르는 모든 환경의 컴파일러에서 그 기능을 지원할 수 있어야 하는데,
화면을 지우는 기능이 여러 환경에서 똑같이 지원될 수 없기 때문입니다.
(보통 화면 입출력, 그래픽, 사운드 등의 하드웨어적인 제어를 필요로 하는
함수들이 같은 이유로 표준에서 빠져 있습니다.)
그럼 clrscr()이 표준이 아니라고 해서 int86을 쓰면 표준을 지키는 걸까요?
천만의 말씀입니다. int86은 x86 계열 CPU에서 인터럽트를 발생시키는
명령인데, 당연히 x86 계열 CPU 환경을 기반으로 하는 몇몇 컴파일러에서만
제대로 돌아갈 겁니다.
그렇다고 해서 표준이 아닌 함수는 무조건 사용하지 않는 것이 좋다고
생각하는 것도 저는 잘못되었다고 봅니다. 그게 맞다면 컴파일러마다 굳이
extension을 제공할 필요가 애초부터 없었겠지요. 비표준 함수를 사용할
때는 그 함수가 비표준이라 다른 컴파일러에서는 안 돌아갈 것이라는 것을
분명히 인식은 해야겠지만, 주어진 환경에서 원하는 일을 수행하기 위해
비표준인 함수도 적절히 사용할 수 있는 것이 진정한 능력이겠지요.
물론.. 비표준 함수들은 뭐가 있는지 알아두고 필요할 때 레퍼런스 찾아가며
쓰면 되는 것이지, 그다지 열심히 공부할 가치는 없습니다. 컴파일러가
바뀌면 소용 없는 것이기 때문에..
그리고 또 한 가지, 여기 han.comp.lang.c 그룹은 C 언어의 표준에 정해져
있는 것들만 다루는 그룹이라는 것을 알아두세요. 각각의 운영체제 또는
컴파일러마다 차이가 나는 사항들에 대해 이야기하기에 적합한 그룹은
<han.comp.os.*>, <han.comp.devtools.*>입니다.
--
김승범
이제껏 알고 있던 ANSI표준에 대해 완전히
느낌이 팍하고 오는 답변이었습니다.
정말로 답변감사합니다.
Kim Sung-bom 이(가) <3948FDFD...@bawi.org> 메시지에서
작성하였습니다...