gcc 컴파일러(GNU cc컴파일러) / 상업용 cc컴파일러도있다.

 

컴파일 $gcc [-옵션] 파일

 

컴파일 $gcc longest.c -> $a.out //default 실행 파일

 

-c 옵션(compile)

$ gcc -c longest.c //longest.o 목적 파일 생성

longest.c를 compiler가 assembly code로 변환시키고 assembler가 이를 longest.o(기계어 코드) 목적파일로바꾼다

 

-o 옵션(compile & link)

$ gcc -i longest(실행파일) longest.o // link, longest:실행 파일

혹은

$ gcc -i longest longest.c //compile & link

$ longest //실행 파일 명

 

$ a.out < input.txt (a.out실행에 대한 데이터를 input.txt에서 받아라)

-> 입력 재지정 (키보드->file)

$ cat > cs2.txt

-> 출력 재지정

 

단일 모듈 프로그램

- 코드 재사용이 어렵고, 여러 사람이 참여하는 협업적 프로그래밍이 힘들다.

-> 다른 프로그램에서 copy 사용이 힘듦

 

다중 모듈 프로그램

- 여러 .c파일로 이루어진 프로그램

- 일반적으로 규모 있는 프로그램 개발시 적합

 

다중 모듈 프로그램 : 컴파일 & 링크

컴파일 // 생략 가능

- 전처리, 컴파일, 어셈블 -> 목작파일(.o)

$gcc -c main.c

$gcc -c copy.c

 

링킹

- 목적파일1, 목적파일2, ... 라이브러리(printf) -> 실행 파일(main)

$gcc -i main main.o copy.o

혹은

$ gcc -i main main.c copy.c

-> 실행 파일 main (main.o + copy.o + lib)

 

vi editor

- 기본 텍스트 에디터로 매우 강력한 기능을 가지고 있음

$vi 파일명

 

모드

1. 입력모드

- 입력하고자 하는 글자 입력하고, 입력 상태를 그대로 보여 줌

2. 명령어 모드

- 한 글자 또는 두 글자 명령을 사용하여 커서를 이동하고, 글자를 삭제 및 교체, 검색하는 모드로 다양한 편집이 가능

3. 라인모드(또는 마지막 줄 모드)

ESC를 누른 후 콜론(:) 프롬프트에서 명령을 입력하여 편집 기능 등 다양한 기능 제공

 

명령모드 -> 입력모드 : a 또는 i를 입력하여 변환

입력모드 -> 명령모드 : ESC 키를 입력하여 변환

명령모드 -> 마지막 줄 모드 : :을 입력하여 변환

마지막 줄 모드 -> 명령모드 : Enter 키를 입력하여 변환

마지막 줄 모드

- :wq 작업 내용 저장 및 종료

- :q 아무런 작업을 하지 않은 경우의 종료

- :q! 작업 내용을 저장하지 않고 종료

 

vi 내부 명령어

1. 입력모드로 전환

i 커서 위치 앞에 삽입

a 커서 위치 뒤에 삽입

I 현재 줄의 앞

A 현재 줄의 뒤

o 현재 줄의 아래

O 현재 줄의 위

 

2. 원하는 위치로 이동

- 커서 이동

방향키 또는 h(왼),j(아래),k(위),l(오른쪽)

- 화면 이동

Ctrl+F 한 화면 아래

Ctrl+B 한 화면 위

Ctrl+D 반 화면 아래

Ctrl+U 반 화면 위

- 특정 줄로 이동

nG n번째 줄로 이동

1G 첫 줄로 이동

G 마지막 줄로 이동

:n n번째 줄로 이동

 

3. 수정 혹은 삭제

- 삭제

x 커서 있는 문자 지우기

X 커서 왼쪽 문자 지우기

dw 현재 단어 지우기

dd 현재 줄 지우기

:n,m d n~m 번째 줄 삭제

D 커서부터 줄 끝까지 지우기

- 수정

r 단지 한 글자만 변경

R 입력하는 대로 겹쳐쓰기

s 현재 글자 삭제 삽입 상태

C 커서로부터 줄 끝까지 변경

cc 현재 줄 전체 변경

cw 현재 단어 삭제 및 변경

 

4. 복사 및 붙이기

- 복사

yy 현재 줄 복사

nyy 현재 줄부터 n개 줄 복사

nY 현재 줄부터 n개 줄 복사

:n,m y n~m 줄까지를 버퍼에 복사

- 마지막으로 삭제/복사한 내용 붙이기

p 버퍼 내용을 커서 뒤에 삽입

P 버퍼 내용을 커서 앞에 삽입

 

5. 기타 명령

- 수행취소 / 재수행

u 방금 전 수행 내용 취소

U 현재 줄 수행 내용을 취소

. 방금 전 수행 내용을 반복

- 탐색

/탐색패넡 forward탐색

?탐색패턴 backward탐색

n 진행 방향으로 탐색 계속

- 대체 명령

:s/패턴/스트링 : 현재 줄에서 패턴에 해당되는 것을 대체

:n,m s/패턴/스트링/g (g:해당 문자열 전부 치환) : 지정된 줄(n,m) 범위에서 모두 대체

:%s/good/nice/g : 전 파일내에서 해당되는 모든 패턴 대체

:1,$s/good/nice/g : 전 파일내에서 해당되는 모든 패턴 대체

:n s/패턴/스트링 : 지정된 줄(n)에서 대체
- 줄 번호 붙이기

:set number 줄번호 붙이기

:se nu 줄번호 붙이기

:set nonumber 줄번호 없애기

:se non 줄번호 없애기

 

make 시스템 : 효과적으로 컴파일 & 실행 파일 생성

- 실행 파일을 만들기 위해 필요한 파일들과 생성 방법을 기술

-> make 시스템을 파일들간 상호 의존 관계를 파악하여 실행 파일을 빠르게 다시 생성

$ make [-f 메이크파일]

옵션으로 지정하지 않으면 Makefile 혹은 makefile을 디폴트로 사용

 

Makefile의 구성 형식

대상리스트: 의존리스트

[tab]명령리스트

 

가장 대표적인 디버거 GNU debugger(gdb)

 

gdb 사용을 위한 컴파일

-g 옵션

$gcc -g -o longest longest.c

다중 모듈 프로그램

$gcc -g -i main main.c copy.c

 

gdb실행

$ gdb [실행파일]

 

gdb주요 기능

1. 정지점 설정

2. 한 줄씩 실행

3. 변수 접근 및 수정

4. 함수 탐색

5. 추적

 

gdb 기능

소스보기 : l(ist)

l [줄번호] 지정 줄 프린트

l [파일명]:[함수명] 지정 함수 프린트

 

ex) (gdb) l copy -> copy함수부분을 찾아서 보여줌

 

정지점 : b(reak), clear, d(elete)

b [파일:] 함수 파일의 함수 시작부분에 정지점 설정 

b n n번 줄에 정지점 설정

b +n 현재 줄에서 n개 이후 정지점 설정

b -n 현재 줄에서 n개 이전 정지점 설정

info b 현재 설정된 정지점 출력

clear 줄번호 해당 정지점을 삭제

d 모든 정지점 삭제

 

(gdb) b copy

(gdb) info b

 

프로그램 수행

r(un) 인수 : 명렬줄 인수를 받아 프로그램 수행

k(ill) 강제종료

n(ext) 멈춘 지점에서 다음 줄 수행하고 멈춤

s(tep) n과 같은 기능 함수 호출 시 함수내부로 진입

c(ontinue) 정지점을 만날 때 까지 계속 수행

u 반복문에서 빠져나옴

finish 현재 수행하는 함수 끝으로 이동

return 현재 수행하는 함수 빠져나옴

quit 종료

 

(gdb) r 

 

변수 값 프린트 p(rint)

p [변수명] : 해당 변수 값 프린트

p 파일명::[변수명] : 특정 파일의 전역변수 프린트

p [함수명]::[변수명] : 특정 함수의 정적 변수 프린트

info locals : 현재 상태의 지역변수 리스트

 

(gdb) p from

(gdb) n

(gdb) n

(gdb) p to

 

DDD(Data Display Debugger) : gdb를 위한 그래픽 사용자 인터페이스다

 

문자열 길이 계산 함수

size_t strlen(const char *s);

문자열을 단어로 분리하는 함수

char *strtok(char *s, char *delim);

두번째 strtok호출부터는 NULL로 설정해야함

ptr = strtok(str,delim);

ptr = strtok(NULL, delim);

'학교수업' 카테고리의 다른 글

컴퓨터 구조 3주차  (0) 2022.03.21
윈도우즈 프로그래밍 3주차  (0) 2022.03.17
컴퓨터 그래픽스 기초 2주차  (0) 2022.03.16
게임공학개론 2주차  (0) 2022.03.16
인공지능개론 2주차  (0) 2022.03.14

+ Recent posts