본문 바로가기

카테고리 없음

독하게 시작하는 C스터디 2주차 정리 - C언어 기초 문법과 표준 입/출력

 

 

 

 

이번주에도 정리를 해보자하~~,,~

 

 

 

 

 

섹션 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 - 그 다음줄 실행한 상태에서 디버그 모드