공감각이라는 것에 대해

아래 사진에 2가 몇개나 보이고 어떤 형태로 보이는가??



공감각이라는게 있다고 한다.
영국에서 조사한 결과 23명당 한명꼴로 발생한다고 하는데 위 사진에서 2가 특별하게 보였는가?
나는 평범한 보통 사람이라 그런지 한참을 찾았다.
내 주위에서 2가 특별히 보이는 사람이 있을까?

by 머찐깽시기 | 2008/05/30 13:16 | 트랙백 | 덧글(0)

0x80 을 &연산 하는 이유

그것은 if ( str[i] & 0x80 ) 이었는데

str은 분명히 CString 형으로 선언되어 있으니 str[i] 에는 하나의 글자가 들어가 있을테고

그렇다면 char 한개와 & 0x80 의 비트 연산이라는 것인데...

이것이 무엇을 의미하는지 한참을 고민했다.

이리저리 찾다보니 이것의 의미를 알아낸것 같다(사실 정확히는 모르겠다. 단지 추측일뿐).

우선 ASCII 의 경우 문자는 7bit로 구성되고 첫번째 1bit는 다른 용도로 쓰인다는 것.

즉, ASCII 문자라면 0000 0000 ~ 0111 1111 의 범위를 가진다는 것~!

그렇다면 유니코드는 첫번째 1bit가 1의 값이 되어있을 것이란 추측이 가능하다.

그러므로 str[i] & 0x80 를 수행 한다는 것은 str[i]가 어떤 값인지는 모르지만

    X??? ???? ==> str[i]
&  1000 0000 ==> 0x80
-------------------------
이와 같은 연산이 되어서 ASCII가 아닌 문자일 경우 TRUE가 되고
ASCII 문자는 모두 false 값이 되는 것이다.

출처 :
http://chovo.net/21

by 머찐깽시기 | 2007/10/17 20:33 | 트랙백 | 덧글(0)

vimrc 한글설명 (유닉스/윈도우)


" =============================================================================
" 유닉스 윈도우 공용 .vimrc 파일
" Edited by Guk-Bong Kwon<gbkwon at kebi.com>
" =============================================================================
"
" =============================================================================
" $VIMRUNTIME 을 먼저 설정 해준다. 기본적으로 설정을 해주지 않아도 되나 인식이
" 안되는 시스템이 있어 기본 값으로 설정을 해 준다.
" =============================================================================
if has("unix")
"    let $VIMRUNTIME="/usr/local/share/vim/vim"
elseif has ("win32")
"    let $VIMRUNTIME="C:/Vim/vim61"
endif

" =============================================================================
" 기본적으로 설정되는 예제들을 포함 한다. history .. 등..
" =============================================================================
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/gvimrc_example.vim

" =============================================================================
" 윈도우에서만 사용되는 여러가지 키 맵들을 포함한다.
" C-v, C-c, C-q, C-a 등...
" =============================================================================
if has("win32")
    source $VIMRUNTIME/mswin.vim
endif

" =============================================================================
" selection, selectmode mousemodel 등 xterm-color 에 해당되는 내용을 기본으로
" 설정 해준다.
" set 'selection', 'selectmode', 'mousemodel' and 'keymodel' for xterm-color
" =============================================================================
behave xterm

" =============================================================================
" 여기서 부터는 기본적인 값들을 하나씩 설정 한다.
" =============================================================================
" =============================================================================
" 엔터를 치거나 O, o 로 줄을 삽입 할때 자동으로 indentition 하는 가에 대한
" 옵션이다.
" =============================================================================
set ai

" =============================================================================
" 아래와 같은 명령시 자동으로 저장 하는 가에 대한 옵션이다.
" :next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
" :make, CTRL-] and CTRL-^ command; and when a CTRL-O, CTRL-I,
" '{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
" =============================================================================
set aw

" =============================================================================
" 아래와 같은 명령어시 모두 저장하는 가에 대한 옵션이다.
" Like 'autowrite', but also used for commands ":edit", ":quit",
" :qall", ":exit", ":xit", ":recover" and closing the Vim window.
" =============================================================================
set awa

" =============================================================================
" 파일을 열어서 편집 하고 있는 중에 파일이 변경 되었을때 자동으로 읽어서
" 갱신하는 가에 대한 옵션이다. 자동으로 갱신을 하면 내가 편집한 부분에 대해서
" 분실할 위험이 있다.
" =============================================================================
"set autoread
" =============================================================================
" vim 은 기본적으로 파일을 저장 하기 전에 백업 파일을 만드는데 그 파일을
" 저장하는 디렉토리를 설정 하는 부분이다.
" =============================================================================
if has("unix")
    set backupdir=~/tmp,~/,/tmp
elseif has ("win32")
    set backupdir=C:\Vim\backup
endif

" =============================================================================
" 맨아래 보이는 명령줄의 높이를 정하는 옵션이다. 기본 값이 1이다.
" =============================================================================
set ch=1

" =============================================================================
" C언어를 작성할때 indentition 을 할 것 인가에 대한 옵션이다.
" =============================================================================
set cindent

" =============================================================================
" 구식 vi 와 동일하게 작동할 것인가에 대한 옵션이다. 구식 vi와 동일하게
" 작동하도록 설정된다면 많은 편리한 기능을 사용할수 없을 것이다.
" =============================================================================
set nocompatible

" =============================================================================
" 인코딩에 대한 설정이다.  윈도우와 유닉스가 틀리다.
" =============================================================================
if has("unix")
    set encoding=euc-kr
elseif has ("win32")
    set encoding=cp949
endif

" =============================================================================
" indentition 시 탭대신 공백을 삽입 하는가에 대한 옵션이다. 이 옵션의 경우
" Makefile 를 작성할때는 필히 꺼야 되는 옵션이다 Makefile 는 탭과 공백을
" 정확히 구분하기 때문이다. 탭으로 정확히 작성되었는가를 알아 볼려면 :set list
" 명령을 주면 정확히 알아 볼수 있게 된다.
" =============================================================================
set expandtab
au BufNewFile,BufRead [mM]akefile,[mM]akefile*,GNUmakefile,*.mk,*.mak,*.dsp
            \ set noexpandtab

" =============================================================================
" 현재 디렉토리에 .vimrc 가 있을 경우 ~/.vimrc 를 읽어 초기화후에 현재
" 디렉토리에 .vimrc를 더불어 읽어 옵션을 다시 설정 한다.
" ./.vimrc 를 읽어 들이기 위함 exrc 가 더 나중에 실행 되는 것 같음
" =============================================================================
"set exrc
"au BufNewFile,BufRead *.c,*.h,*.java,*.cpp,*.jsp,*.php,*.ph set exrc
" exrc 가 안되서 임시 방편
if has("unix")
    au BufNewFile,BufRead *.c,*.h,*.java,*.cpp,*.jsp,*.php,*.ph
                \ if filereadable(".vimrc") | so .vimrc | endif
elseif has("win32")
    au BufNewFile,BufRead *.c,*.h,*.java,*.cpp,*.jsp,*.php,*.ph
                \ if filereadable("_vimrc") | so _vimrc | endif
endif

" =============================================================================
" 파일에 대한 인코딩을 설정한다. encoding, fileencoding, fileencodings 의 상관
" 관계를 정확히 알지 못하겠다.
" =============================================================================
if has("unix")
    set fileencoding=euc-kr
elseif has ("win32")
    set fileencoding=cp949
endif

" =============================================================================
" 파일의 인코딩을 설정한다.
" =============================================================================
set fileencodings=euc-kr

" =============================================================================
" 폴더를 사용하는 방법에 대해서 설정한다. marker 는 { {{ 와 같은 표식을
" 사용하여 폴딩 되는 소스의 범위를 설정 해 놓는다. 이는 이 파일을 다시
" 열었을때 기존의 폴더 정보를 그대로 유지 할수 있게 해 준다.
" =============================================================================
set foldmethod=marker

" =============================================================================
" 폴더 설정이 되어 있는 파일을 열었을때 폴더 되어 있는 레벨을 설정한다.
" 기본값 0이고 모두 폴딩된다.
" =============================================================================
set fdl=1

" =============================================================================
" 소스파일이 폴딩 되어 있을때 폴딩범위를 보여주는 컬럼의 수를 설정한다.
" =============================================================================
set fdc=3

" =============================================================================
" 윈도우 사용시 gvim의 폰트및 gui 옵션을 설정한다. gui 옵션은 메뉴, 스크롤바,
" 툴바, 스크롤바의 위치 기타 등등 gvim 사용시 보여 지는 것들에 대한 옵션을
" 설정하는 것이다. 아래의 설정은 아무것도 없이 사용하는 것이다.
" =============================================================================
if has("win32")
    set guifont=굴림체:h9:cHANGEUL
    set guioptions=
endif

" =============================================================================
" 파일 편집시 undo 할수 있는 최대 횟수를 설정한다.
" =============================================================================
set history=1000

" =============================================================================
" search 시 찾는 단어를 하이라이팅 해 준다.
" =============================================================================
set hlsearch

" =============================================================================
" 찾기, 바꾸기 등에서 대소문자 구분을 하지 않는다.
" =============================================================================
set ignorecase

" =============================================================================
" MS 윈도우에서 한영 전환 패치가 되었을때 insert 모드나 command 모드로 들어
" 갈때 영어로 입력 시작하게 한다. 아래는 기본 값이다.
" =============================================================================
"set noimdisable
"set noimcmdline

" =============================================================================
" search시(/) 영어로 입력이 시작 되게 한다.
" =============================================================================
set iminsert=0
set imsearch=0

" =============================================================================
" 한텀에서 한영전환을 Shift+space 로 변경할 수 있게 한다.
" =============================================================================
"set imactivatekey=S-space
"
" =============================================================================
" status line(맨아래 상태줄)이 항상 나오게 해 준다. 기본은(1) 두개 이상의
" 윈도우를 열었을시(윈도우를 split할때)만 나오게 된다.
" =============================================================================
set laststatus=2

" =============================================================================
" 뭘 뜻하는지 잘 모르겠다.
" =============================================================================
set linebreak

" =============================================================================
" MS windows 에서 라인 간격을 조정 해 준다. 기본 값은 1이다.
" =============================================================================
if has("win32")
    set linespace=0
endif

" =============================================================================
" 줄번호를 보여 준다.
" =============================================================================
set number

" =============================================================================
" >>, << command 시 shift 할 크기를 정해준다 통상 와 동일하게 설정 하면 된다.
" =============================================================================
set shiftwidth=4

" =============================================================================
" 닫는 괄호")", 브라켓"}"을 입력시 매칭되는 여는 괄호, 브라켓에 잠시 커서가
" 위치했다가 다시 제자리로 돌아 온다.
" =============================================================================
set showmatch

" =============================================================================
" 뭘 뜻하는지 잘 모르겠다.
" =============================================================================
set smarttab

" =============================================================================
"
" =============================================================================
set smartindent

" =============================================================================
"
" =============================================================================
set softtabstop=4

" =============================================================================
" 화면 맨 아래 상태 줄이 어떻게 나오는 가를 형식화 하는 것이다.
" =============================================================================
set statusline=\ %f\ %m%h%r\ [%P]\ %a\ %<%l:%v\

" =============================================================================
" 각 파일의 성격(?)에 맞게 색깔로 보여 준다.
" =============================================================================
syntax on

" =============================================================================
" vi가 끝난 후에 화면 제어를 한다. 즉 vi가 끝이 난후 화면을 vi가 시작 하기
" 전으로 되될려 놓는가 아닌가를 결정 한다. 보통 xterm* 의 경우는 vi가 시작 되기
" 전의 화면으로 되돌려 놓는다.
" =============================================================================
"set t_te=""
"set t_ti=""
"
" =============================================================================
" 탭으로 사용할 크기를 정한다. tabstop 를 4로 둘경우 기존의 많은 소스들의
" indentation 이 깨어 지기 때문에 tabstop는 8로 놓고 shiftwidth을 4로 놓으면
" 보는 소스는 tabstop를 8로 볼수 있고 직접 작성하는 소스에 indentation을 4로
" 맞출수가 있다. 요즘은 tabstop이 4로 가는 추세이다.
" =============================================================================
set tabstop=8

" =============================================================================
" 운영체제에 맞는 터미널을 설정한다. 유닉스의 경우는 xterm 이나
" xterm-color으로 설정하고 MS 윈도우의 경우는 win32로 설정한다. 유닉스의 경우
" 터미널에 따라 backspace, del 키가 작동을 달리 하니 각 터미널을 사용해 보고
" 오작동 하지 않는 터미널을 선택하여 사용한다.
" =============================================================================
if has("unix")
    set term=xterm-color
elseif has ("win32")
"    set term=win32
endif

" =============================================================================
" 확장자가 txt 로 끝나는 파일을 작성시 혹은 편집시 폭을 80으로 설정한다. 이는
" 80 column 이 넘게 되면 자동으로 Enter을 넣어 준것과 같은 효과를 낸다.
" =============================================================================
au BufNewFile,BufRead *.txt set textwidth=80

" =============================================================================
" search 시 파일의 맨끝까지 다 찾고 난뒤 다시 파일의 처음으로 돌아가서 찾을수
" 있게 해주는 것이다. 기본값은 on 이다.
" =============================================================================
set nowrapscan

" =============================================================================
" 색깔 설정
" 윈도우의 경우는 MS, MSB라는 새로운 두가지 색깔을 정의 해서 사용한다.
" =============================================================================
if has("unix")
    hi Folded ctermbg=Brown ctermfg=Black
    hi FoldColumn ctermfg=DarkBlue ctermbg=NONE
    hi LineNr ctermfg=DarkBlue
    hi DiffAdd term=bold ctermbg=Brown
    "" bold off
    hi NonText cterm=NONE
    hi ErrorMsg cterm=NONE
    hi ModeMsg cterm=NONE
    hi StatusLine term=REVERSE cterm=NONE ctermfg=3 ctermbg=black
    hi VisualNOS term=NONE cterm=NONE
    hi DiffDelete term=NONE cterm=NONE
    hi DiffText cterm=NONE
    hi Error cterm=NONE
elseif has ("win32")
    " MS 윈도우 버튼 기본 색깔인 회색으로 지정
    "212 208 200    MS #D4D0C8
    "199 199 199    MSB #C7C7C7
    hi Normal guibg=#D4D0C8 guifg=Black
    hi NonText guibg=#C7C7C7 guifg=Black gui=NONE
    hi Visual guibg=Black guifg=grey69
    hi LineNr guibg=#C7C7C7 guifg=Blue
    hi Folded guibg=DarkYellow guifg=Black
    hi FoldColumn guibg=#C7C7C7 guifg=Blue
    hi StatusLine guibg=Yellow guifg=black gui=reverse
    hi Cursor guibg=Black guifg=white
    hi CursorIM guibg=Purple guifg=Black
    "" bold off
    hi MoreMsg gui=NONE
    hi ModeMsg gui=NONE
    hi Question gui=NONE
    hi Title gui=NONE
    hi VisualNOS gui=NONE
    hi DiffText gui=NONE
    hi DiffDelete gui=NONE
    hi Statement gui=NONE
    hi Type gui=NONE
endif

" =============================================================================
" =============================================================================
" 확장 매크로 설정
" =============================================================================
" =============================================================================
" =============================================================================
" 컬러링된 html 만들기
" =============================================================================
com! Html :so /usr/local/share/vim/vim/syntax/2html.vim

" =============================================================================
" 다음 에러 및 이전에러 난곳으로 가기
" =============================================================================
map <F1> :cn<CR>
imap <F1> <ESC>:cn<CR>
" 아래 키는 안먹는다.
map <C-F1> :cp<CR>
imap <C-F1> <ESC>:cp<CR>

" =============================================================================
" 주석 처리 및 제거 하기
" =============================================================================
nmap <silent> <unique> <F2> <Plug>Traditionalj
imap <silent> <unique> <F2> <Esc><Plug>Traditionalji
vmap <silent> <unique> <F2> <Plug>Traditionalj

"<F3> - 줄 끝에 주석을 더한다.
map <F3> <End>a<Tab>/*<SPACE>*/<LEFT><LEFT>
imap <F3> <End><Tab>/*<SPACE>*/<LEFT><LEFT>

""<F4> - 탭을 더한다.
map <F4> i<TAB><ESC><RIGHT>
imap <F4> <ESC><TAB><ESC><RIGHT>i

""<F6> - :sts
""<F6> - :sts
"":sts 가 안되어서 비슷하게..
"map <F6> :sts<CR>
"imap <F6> <ESC>:sts<CR>
" g] 모든 태그를 보고 그중에서 고른다.
map <F6> <C-W>g]
imap <F6> <C-W>g]

" =============================================================================
" MS-WINDOWS 에서 창 크기 최대화 하기
" =============================================================================
""<F8> - :simalt~x
if has("unix")
elseif has("win32")
    map <F8> :simalt~x<CR>
    imap <F8> :simalt~x<CR>
endif

" =============================================================================
" <F9> - :retab
" =============================================================================
map <F9> :retab<CR>:w<CR>
imap <F9> <ESC>:retab<CR>:w<CR>a

" =============================================================================
" <F10> - :set fileformat=unix
" =============================================================================
if has("unix")
    map <F10> :set ff=unix<CR>:w<CR>
    imap <F10> <ESC>:set ff=unix<CR>:w<CR>a
elseif has("win32")
    map <F10> :set ff=dos<CR>:w<CR>
    imap <F10> <ESC>:set ff=dos<CR>:w<CR>a
endif

" =============================================================================
" 자동으로 Makefile 를 찾어서 컴파일 한다.
" =============================================================================
if has("unix")
    nmap <silent><unique> <F5> :make<CR>:cwin<CR>
"    set makeprg=make\ %<
    au BufNewFile,BufRead *.c if !filereadable("Makefile") && !filereadable("GNUmakefile") |
                \ set makeprg=gcc\ -Wall\ -ggdb\ -I.\ -L.\ %\ -o\ %< |
                \ endif
    au BufNewFile,BufRead *.cpp if !filereadable("Makefile") && !filereadable("GNUmakefile") |
                \ set makeprg=g++\ -Wall\ -ggdb\ -I.\ -L.\ %\ -o\ %< |
                \ endif
endif

" =============================================================================
" :Sexplorer command 시에 vertical 로 화면을 나누면서 explorer을 보여 준다.
" pi_expl.txt 50 line 참조 vertical 로 나눈다.
" =============================================================================
let g:explVertical=1
" 화면의 크기를 동일하게 한다.
let g:explWinSize=""
" 화면을 분할 할때 오른쪽에 새 화면이 오게 한다.
let g:explSplitRight=1
" 디렉토리 리스팅을 할 적에 기본 값을 자세하게 리스팅 할수 있도록 한다.
" 시간이 많이 걸린다.
"let g:explDetailedList=1
"
" =============================================================================
" bufexplrer 이 로딩안되게 한다.
" =============================================================================
let loaded_bufexplorer = 1          " bufexplrer 이 로딩안되게 한다.
let loaded_winmanager = 1           " winmanager 이 로딩 안되게 한다.

" =============================================================================
" EnhancedCommentify 에 대한 설정 help EnhancedCommentify
" =============================================================================
"let g:EnhCommentifyRespectIndent = 'yes'
"let g:EnhCommentifyPretty = 'yes'
"let g:EnhCommentifyUseBlockIndent = 'yes'
"let g:EnhCommentifyAlignRight = 'yes'
" =============================================================================
" Taglist 에 대한 설정
" =============================================================================
" Tlist 가 가로로 열리게 만든다.
"let Tlist_Use_Horiz_Window = 0
" Tlist 의 기본은 30
let Tlist_WinWidth = 21
"let Tlist_Inc_WinWidth = 0
" Tlist 를 좀더 편리하게 조정한다.
function! MyTlist()
    exe 'Tlist'
    if exists('g:MyTlist') && g:MyTlist == 1
        let g:MyTlist = 0
"        exe ':<C-W> ='
    else
        let g:MyTlist = 1
        exe 'vert resize 95'
    endif
endfunction
"nnoremap <silent> <F7> :Tlist<CR>
nnoremap <silent> <F7> :call MyTlist()<CR>
" xa 모든 버퍼를 저장하고 끝낸다.
" help updatetime 0.1초
set updatetime=1000
" jsboard 수정시 template 파일을 php 로 인식 한다.
au BufNewFile,BufRead *.template set ft=php
au BufNewFile,BufRead *.ph set ft=php
" 오라클 proc 설정
au BufNewFile,BufRead *.pc so ~/.vim/syntax/proc.vim

" :Man 맨 페이지를 볼수 있게 해 준다..
runtime ftplugin/man.vim
" SQL Loader 사용시 control 파일을 위해서
au BufNewFile,BufRead *.ctl set ft=plsql


" =============================================================================
" 자동으로 fold 된 상태를 저장한다.
" =============================================================================
au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

" =============================================================================
" 테스트
" =============================================================================
" 자동으로 }닫는 매크로
"au BufNewFile,BufRead *.c imap { {<CR>}<ESC>O
"au BufNewFile,BufRead *.c imap ( ( )<LEFT><LEFT>
" 메뉴 및 메세지를 다른언어로 표현(인코딩에는 전혀 영향이 없음)
"source $VIMRUNTIME/delmenu.vim
"set langmenu=none
"source $VIMRUNTIME/menu.vim
"lan en-us
" 현재 줄 하이라이팅 약간의 버그가 있네..
"hi Search ctermfg=Black ctermbg=Yellow
"nmap <silent> j :exe '/\%'.(line(".")+1).'l.*'<cr>
"nmap <silent> k :exe '?\%'.(line(".")-1).'l.*'<cr>
"set shm=""

by 머찐깽시기 | 2007/10/16 14:18 | 트랙백 | 덧글(0)

AIX debugger tool (dbx)

Application Debugging


AIX
는 두 가지의 debugger를 제공한다. Text기반의 dbx dbx GUI interface를 씌운 xldb이다.
Debugger
를 사용하려면 반드시 source code compile할 때 -g option을 사용하여 compile해야 debugger에서 사용할 정보를 만들어 줄 수 있다.
Debugging
이 전부 완료된 다음에는 -g option을 빼고 다시 compile해야 프로그램의 크기가 줄어든다.

a) dbx
기본사용법

$ dbx [
실행파일이름]
가장 간단한 실행방법이며 독립된 프로그램을 debugging할 수 있다.
만약 현재 수행되고 있는 프로세스를 debugging한다면 다음처럼 사용할 수 있다.

$ dbx -a [process id]
물론 이 프로세스도 -g option으로 compile되어 있어야 하며, process debugging이 끝나고 process를 종료 시키지 않은 채로 dbx를 종료하려면 detach명령어로 종료하도록 한다.

b) dbx
명령어 목록

다음은 dbx에서 유용하게 사용할 수 있는 명령어의 목록이다.
모두 dbx prompt상에서 help 를 입력하면 사용할 수 있는 명령어가 보이고 사용방법은 help [command name]이라고 입력하면 알 수 있다.

-LIST

(dbx) list

소스코드를 보여준다

(dbx) list 23,25

23번째 줄에서 25번째 줄까지 보여준다

(dbx) list foo

foo 함수를 보여준다

(dbx) file [file_name]

현재 위치를 file_name으로 이동한다

(dbx) func [function_name]

현재 위치를 function_name으로 이동한다

(dbx) where

현재 위치를 알려준다



-PRINT

(dbx) print [expression]

expression의 결과를 보여준다

(dbx) print [variable]

variable의 값을 보여준다

(dbx) print [function_name]

function return값을 보여준다



-ASSIGN
(dbx) assign variable = expression     variable
expression의 값을 넣는다

- BREAKPOINT
(dbx) stop at [source_line_number] [if condition]
condition
이 만족되면 source_line_number에서 멈추도록 breakpoint를 설정한다.

(dbx) stop at "[file_name]":[source_line_number] [if condition]
condition
이 만족되면 특정파일의 몇 번째 줄에서 멈추도록 breakpoint를 설정한다

(dbx) stop if [condition]
condition
이 만족되면 멈추도록 breakpoint를 설정한다

(dbx) stop if [variable]
variable
의 값이 바뀌게 되면 멈추도록 breakpoint를 설정한다

(dbx) status :
모든 breakpoint를 보여준다

(dbx) delete break_point_number
번호에 해당하는 break point를 지운다. Break point번호는 status로 알 수 있다

(dbx) cont :
다음 break point나 코드 끝까지 진행한다

(dbx) step :
코드 한 줄씩 진행한다

(dbx) next :
코드 한 줄이나 함수 안에 있으면 함수 끝까지 진행한다

출처 : http://www-903.ibm.com/kr/techinfo/pseries/tech/tech_16.html

by 머찐깽시기 | 2007/06/21 16:48 | Unix/Linux | 트랙백 | 덧글(0)

_t 로 끝나는 자료형

헤더파일이나 소켓함수원형등에서 ssize_t, size_t...의 자료형을 본 적이 있을 것이다.
ssize_t 는 signed int 이고 size_t는 unsigned int다.(windows에서는 SDWORD와 DWORD...이 있다.)
유닉스 계열에서 사용되는 자료형으로 <sys/types.h>에 typedef로 정의되어 있는데 이는 전통적인 C자료형이다.

int,long,float...의 익숙한 자료형들도 많은데 왜 이런 자료형을 쓸까..

왜냐하면 시스템 종속적 요소로 int나 포인터의 크기는 그 시스템의 한 워드(시스템이 한번에 읽어내는 메모리의 크기)와 같아서 32bit시스템에서는 4byte, 16bit시스템에서는 2byte로 시스템에 따라 다르기 때문이다.
시스템에 따라 자료형의 범위가 다르므로 시스템이 변경되면 코드를 수정해야만 한다.
4byte의 자료형이 필요한 곳에 지금처럼 헤더파일에 unsigned int를 size_t로 정의해 놓고 쓰게 되면 나중에 시스템이 변경되어서 unsigned int 가 더이상 4byte를 나타내지 않게 되었을때 4byte를 나타내는 다른 적절한 자료형을 가지고 헤더파일에 선언되어 있는 size_t를 재정의해 주기만 하면 도니다.

이것이 int,double,float와 같은 특정 자료형에 종속되지 않도록 새로운 이름의 자료형을 정의해 주는 이유가 된다.

출처 : http://ttongfly.net/bbs/view.php?id=c&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=desc&no=17

by 머찐깽시기 | 2007/06/21 16:38 | Unix/Linux | 트랙백 | 덧글(0)

◀ 이전 페이지다음 페이지 ▶