2011년10월11일_원라인에디터프로젝트_2일차_1단계-창만들기_분할컴파일시 주의사항(파일명)



TurboC는 16비트 컴파일러로 과거 DOS시절에서 사용하는 파일시스템 FAT16을 사용한다(?)
그래서 파일명은 8자로 제한되고 확장자는 3자로 제한된다. FAT32는 좀 많이 길게 작성이 가능하다.
(재원이가 물어봐서 가보니 파일명이 9자더라 그래서 8자 이내로 줄이고 하니 잘 되었다. 한 참 찾았음. 간단한데)

● 전체소스코드
▷ main.c

   1: #include "UserDefine.h"
   2:  
   3: int main()
   4: {
   5:     //char far *location;
   6:     char ch = 'A';
   7:     //char attr = 7;
   8:     //int x = 0;
   9:     //int y = 0;
  10:  
  11:     system("cls");
  12:     PutChar(10, 10, ch);
  13:     PutChar(10, 15, ch);
  14:  
  15:     getch();
  16:     return 0;
  17: }

▷ UserDefine.c

   1: #include "UserDef.h"
   2:  
   3: /*********************************************************************
   4:     기  능: 화면에 한 문자를 출력하는 함수
   5:     설  명: RAM -> VideoRAM 전달 되는 영역에 문자를 출력.
   6:     인  자:    1. x축 시작좌표
   7:             2. y축 시작좌표
   8:             3. 출력될 문자
   9: *********************************************************************/
  10: void PutChar(unsigned char x, unsigned char y, unsigned char ucData)
  11: {
  12:     char far *location;
  13:     char attr = 7;
  14:     
  15:     location = (char far *)0xb8000000 + y * 160 + x * 2;
  16:     *location++ = ucData;
  17:     *location = attr;
  18:  
  19:     return ;
  20: }
  21:  
  22: /*********************************************************************
  23:     기  능: 화면에 사각형박스를 그리는 함수
  24:     설  명: PutChar()를 사용.
  25:     인  자:    1. x축 시작좌표
  26:             2. y축 시작좌표
  27:             3. 박스의 폭
  28:             4. 박스의 높이
  29: *********************************************************************/
  30: void PrintRect(unsigned char x, unsigned char y, 
  31:                 unsigned char width, unsigned char height) 
  32: {
  33:     unsigned char ucRow;
  34:     unsigned char ucCol;
  35:     
  36:     PutChar(x, y, PEN_LT);
  37:     for(;;);
  38:  
  39:     return ;
  40: }
  41: 

1행에 UserDefine.h라는 헤더파일을 포함시키는데 문제는 파일명이 10자로 너무 길다.
그래서 파일명 규칙에 어긋나 아래와 같은 에러가 난다.

 image

파일명이 너무 길어 파일을 열 수 없다.
TCC는 어떤 원리로 32bit Windows플랫폼의 cmd 콘솔창에서 자신의 권리를 주장하는지 모르겠다. OS따라 가는 거 아닌가?

   1: #include "UserDef.h"

1행을 수정하고 해당 파일명도 수정해서 컴파일하면,

image
 
> tcc –c main.c
이상하게 tcc사용 후 콘솔의 상태가 이상해 진다. (빨간 사각형)

> dir
MAIN.OBJ가 생성되었다. 옛날 DOS시절에는 소문자와 대문자를 구분하지 않았다. 그래서 모두 대문자로 된 오브젝트 파일이 생성된다.

image  

> tcc –c UserDef.c

아직 함수구현이 덜 되어 사용하지 않는 함수(39행)와 사용하지 않는 인자(40행)이 있다.

image

> dir

USERDEF.OBJ파일이 생성되었고 마찬가지로 모두 대문자이다.


image

> tcc main.obj userdef.obj

생성된 오브젝트 파일을 링크하여 실행파일을 만든다. main()가 있는 main.obj와 같은 이름의 main.exe가 만들어 진다.
이렇게 오브젝트 파일을 따로 만들지 않고 한꺼번에 하는 법은 아래와 같다.

image



● 실행화면

image