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 |