이번주에도 정리를 해보자하~~,,~
섹션 8. C언어 기초 문법
사용 가능 문자
ASCII 코드 기준 문자 중 일부 / 영어 대소문자 / 숫자 0 ~ 9 /
특수문자, white space, escape sequence
예약어
= 특수 목적으로 사용하는 단어이고, 코드 입력시 파란색으로 나타남.
변수 이름 작성 규칙
- 영어 대소문자, _, 숫자
- 첫 글자 숫자 x
- 이름 중간에 공백 문자 사용 불가
- 예약어 사용 불가
- 너무 긴 이름 x
- 의미 알 수 없는 이름 x
ex) int aaa
항, 식, 구문, 실행
1. 항
문자(피연산자, 변수, 상수) 로 항을 기술함.
또 소괄호 이용해 여러 항을 한 항으로 묶음.
2. 식
식 = 항 + 연산자
식에서 연산 과정(평가)가 일어남.
3. 구문
구문 = 여러 식
여러 구문을 중괄호로 묶을 수 있음.
4. 실행(함수)
여러 줄의 구문
코드와 주석
코드에 대한 메모.
// - 한 행
/* */ - 구간 전체, 여러 행 가능
Ctrl + K + C : 주석 지정 / Ctrl + K + U : 주석 해제
섹션 9. 표준 입/출력
Console과 CLI
CLI 기반 HCL는 키보드 입력으로 구현
CLI : 글자 입력하여 컴퓨터에 명령 내리는 방식의 인터페이스 ex) 터미널
HCI : 사람과 컴퓨터가 정보를 주고 받을 수 있도록 하는 인터페이스 ex) 키보드, 마우스
키보드를 입력하면, 입력한 값이 메모리, 특히 I/O 버퍼에 연속적으로 저장됨.
그리고 I/O 버퍼에서 한글자 단위로 그 값들을 처리함.
* 참고 1. 메모리
메모리는 메모리 주소 0번부터 끝까지 순차적으로 값을 저장하는 게 아님.
메모리 내에서 여러 사용 분야가 있음.
ex) I/O 버퍼, video 출력 등.
// 메모리 좀 더 공부해야 겠다..
그래서 내가 사용하려는 부분에 대한 메모리에 값을 저장하고 활용하는 것.
* 참고 2. 인터럽트
인터럽트는 컴퓨터에 교통정리를 명령하는 신호임.
어떤 상황에서 사용하냐면, RAM에 키보드를 통해 글을 쓸 수도 있고, 또 읽을 수도 있는 상황에서,
read하면서 write하면 안되고, write하는 데 read하면 안되기 때문에
교통정리를 하려고 사용함!
그래서 인터럽트는 방해하는 그런 것이 아니고,
여러 동작이 일어날 때, 그 순서를 잡아주고 컴퓨터에게 알려주는 just 신호 로 보면 된다.
그래서 인터럽트가 많을 수록 or 높을 수록 좋음. ex) 보통 250개 가량 있다고 함..
** 궁금증.
- 그럼 인터럽트에는 어떤 내용이 저장되는 거지?
- 읽는 상황과 쓰는 상황이 동시에 일어나는 건 구체적으로 어떤 상황이지?!
- 일 처리 순서는? 선착 순..??
-> 운영체제도 공부해야겠다.. ㅎ,,
Console
콘솔은 아까 말했듯 CLI.
예전, 아주 옛날 컴퓨터로는 그냥 모니터 화면임.
Console.2
인간의 영역. User mode (디바이스 파일)
----
신의 영역 . Kernel mode (운영체제)
S/W
--------------------------------------
H/W 콘솔(화면), 키보드
인간이 신의 영역에 도달하고 싶다면...?? 디바이스 파일(장치 파일)을 사용한다.
디바이스 파일 : 신의 영역에 갈 수 있도록 하는 추상화된 인터페이스, 파일 명이 con임.
Process가 이 파일에 대해 RWX함.
**디바이스 파일 좀 더 알아보기.
문자 입/출력
getchar() / putchar()
-> 한글자 입력 받고, 출력하는 함수.
Buffered I/O
값이 저장된 메모리 값을 읽거나 출력
_getch() / _getche()
Non-buffered I/O
버퍼를 사용하지 않고 그저 키보드 입력이 일어남 자체에 대해 감지.
* 참고) I/O 버퍼는 Queue 형식의 자료구조를 사용. - 선형적 자료 정리.
문자열
문자열 = 문자 배열
각 문자들이 메모리에 연속적으로 저장되어 있고, 첫 글자가 저장된 메모리의 주소! 로 문자열을 관리함.
문자열의 끝은 항상 '\0' (null) - string zero 라고 함.
문자열 입/출력
gets() / puts()
gets_s()
printf() / scanf(), scanf_s()
이때 gets()는 사용 불가. 보안 결함이 있음.
- 메모리 주소 받지만 얼마나 써야 하는지 크기 확인 안받아서 발생
- 메모리 경계 벗어난 쓰기 수행
- 시큐어 코딩 필요 !
-> 보안도 공부하면 차별화된 C 개발자가 될 수 있음.
대신 window에서는 gets_s()로 문자입력 받음.
리눅스, 유닉스 - fgets() 사용.
puts() - stdout 여기에 문자열을 출력해주는 애.
*참고) 디버그 모드
F9 - 중단점 설정
F5 - 디버그 모드 실행.
디버그 모드를 보면 그 코드까지 실행한 상황에서 메모리의 주소와 입력된 값을 볼 수 있다.
F10 - 그 다음줄 실행한 상태에서 디버그 모드