정리문제
1. 함수를 사용할때는 선언, 호출, 정의를 작성해야한다. 분할컴파일 구조를 이용하여 프로젝를 작성할때 선언, 호출, 정의의 작성위치를 설명하라.
- 함수 선언은 헤더파일에, 호출은 main 소스파일 또는 소스파일, 정의는 소스파일에 작성한다.
2. 함수의 선언이 필요한 이유를 설명하라.
- 컴파일 과정에 함수의 문법이 맞는지 확인하기 위해서
3. 전역변수선언문장은 분할컴파일 구조에서 어디에 작성해야하는지? 이유를 설명하라.
- 전역변수선언문장은 소스파일에 작성해야 한다. 만약 전역변수선언문장을 헤더파일에 작성하게 되면 소스파일에서는 오류가 안나지만 나중에 링크과정에서 하나로 합쳐질때 오류가 생긴다.
4. 라이브러리함수의 선언은 어디에 있는가?
- 라이브러리 함수의 선언은 헤더파일 안에 있다.
5. 라이브러리 함수의 정의는 어디에 있는가?
- 라이브러리 함수의 정의는 오브젝트(목적)파일에 있다.
6. 라이브러리함수와 사용자가 만든 코드가 합쳐지는 시점을 설명하라.
- 사용자가 만든 코드를 컴파일 과정에서 오브젝트 파일로 변환하고 링크 과정에서 오브젝트 파일들을 라이브러리 파일들과 연결하 하나의 실행파일을 생성한다.
7. 헤더파일의 내용물은 컴퓨터가 실행할 코드인가 컴파일러가 필요한 정보인가?
- 헤더파일은 컴파일러가 필요한 정보이다.
8. 헤더파일의 내용은 기계어로 된 실행파일에 포함되는가? 안된다면 이유를 설명하라.
- 헤더파일의 내용은 컴파일 과정에서 사용되므로 기계어로 변환되지 않는다. 그러므로 기계어로 된 실행파일에 포함되지 않는다.
9. 스트림이란 무엇인가?
- 스트림은 입출력 장치와 프로그램 사이에 데이터를 전송해주는 통로이다.
10. 스트림을 정의하는 C언어에서 자료형은 무엇인가?
- FILE
11. 버퍼는 무엇이고 스트림과의 관계를 설명하라.
- 버퍼는 입출력장치에서 데이터를 임시로 저장하는 메모리 공간을 의미한다. 입출력장치와 프로그램 사이에 데이터를 주고 받을 때 스트림을 통해 버퍼를 거쳐서 데이터를 주고 받는다.
12. C언어에서 생성한 변수가 저장되는 메모리는?
- c언어에서 생성한 변수는 RAM에 저장된다.
13. C언어에서 생성한 파일이 저장되는 메모리는?
- c언어에서 생성한 파일은 보조기억장치에 저장된다.
14. C언어의 수식이 실행되는 장치는?
- cpu의 산술논리연산장치(ALU)에서 실행된다
15. 프로젝트 빌드후 실행파일이 생성될때 저장되는 위치와 실행될때 저장되는 위치를 설명하라.
- 프로젝트 빌드 후 실행파일이 생성될 때 저장되는 위치는 보조기억장치이고 실행될 때 저장되는 위치는 RAM에 저장된다.
16. 목적파일은 무엇이며 실행파일과 차이점을 설명하라.
- 목적파일은 컴파일 과정에서 사용자가 작성한 코드를 기계어로 변환된 파일이고 실행파일은 링크 과정에서 목적파일을 라이브러리 파일들과 연결해 생성한 파일이다.
17. 링크과정을 상세히 설명하라.
- 링크 과정은 여러 오브젝트 파일과 라이브러리 파일을 연결하여 최종 실행 파일을 생성하는 단계이다. 이 과정은 컴파일 과정 이후 수행되고 주로 링커라는 도구에 의해 수행된다.
18. 문자 encoding 또는 문자집합에 대하여 설명하라.
- 문자 enconding은 문자 집합의 코드 포인터를 저장하고 전송할 수 있는 바이트 시퀀스로 변환하는 방식이다. 주요 인코딩 방식은 UTF-8(유니코드), ANSI(아스키 코드)가 있다. 문자 집합은 특정 문자의 모음이고 각 문자는 고유한 포인터를 가지고 있다.
19. 화면에 문자를 출력할때 문자 encoding을 설정하는 방법을 설명하라.
- c언어에서는 기본 ANSI(아스키코드)방식이므로 ANSI(아스키코드)는 scanf, printf 등 원래 그대로 사용하면 되고 유니코드를 출력할 때 w를 붙여 wprintf와 같이 사용하면 된다.
20. 파일에 문자를 출력할때 문자 encoding을 설정하는 방법을 설명하라.
- c언어에서 파일에 문자열을 출력할 때 특정 문자 인코딩을 설정하는 것은 c표준 라이브러리에서 직접 지원하지 않는다. 한글은 ANSI로 설정하고, 영문자와 한글이 섞여 있을 때는 ansi로 설정하고 영문자는 한글과 달리 ANSI과 UTF-8과 차이가 없으므로 UTF-8로 설정한다.
21. ANSI와 UTF-8의 차이를 설명하라.
- ANSI은 초기에 사용되었던 문자 인코딩 방식으로 1바이트로 표현되고 ASCII 표준 문자 집합을 기준으로 확장된 것이다. UTF-8은 유니코드 문자집합을 인코딩하는 방식 중 하나로 2바이트에서 최대 4바이트까지 사용하여 표현한다. 또 ANSI과 달리 전 세계 모든 문자를 지원하며, 다양한 언어와 특수 기호를 포함하여 저장하고 전송할 수 있다.
22. C언어에서 유니코드를 사용하는 방법을 설명하라.
- c 언어는 fopen함수에서 파일을 만들 때 인코딩 방식을 기본 ANSI로 설정되어 있기 때문에 유니코드를 사용하려면 ccs 매개변수를 통해 지정해줘야한다. 그리고 파일을 유니코드 모드로 열면 사용해야 할 텍스트가 멀티 바이트 텍스트 이기 때문 wchar_t 자료형을 사용해야 한다. 함수들은 멀티 바이트를 지원하는 함수로 변경해야 한다.(ex fgets->fgetws, printf->wprintf)
23. 분할컴파일 구조에서 정적전역변수의 용도를 설명하라.
- 정적전역변수는 그 파일 안에서만 접근이 가능하기 때문에 링크 과정에서 파일들이 합쳐질 때 다른 파일에서 변수를 변경하려는 위험이나 이름이 같아 오류가 생기는걸 방지할 수 있다.
24. C언어 프로그램이 실행될때 CPU, 메모리, I/O 장치가 언제 이용되는지 구체적인 코드의 예를 들어 설명하라.
- 프로그램이 실행되면 운영체제가 프로그램의 코드, 데이터 등을 메모리에 전송한다. 그리고 입력장치를 통해 사용자에게 입력을 받은 내용을 변수에 저장한다. 그다음 수식이 CPU의 연산장치에서 실행되고 그 결과가 레지스터에 저장되었다가 printf을 통해 결과값이 출력장치(컴퓨터)에 출력된다.
25. 주기억장치와 보조기억장치의 차이를 설명하고 C언어에서 언제 어떻게 활용되는지 설명하라.
- 주기억장치는 휘발성 메모리로 프로그램 종료시 데이터가 사라진다. 보조기억장치는 비휘발성 메모리로 프로그램이 종료되도 데이터는 사라지지 않는다. 프로그램이 실행되면 보조기억장치에 있는 내용들이 주기억장치로 넘어와서 실행되는데 그 이유는 보조 기억장치에서도 실행할 수 있지만 속도가 너무 느리기 때문에 보조기억장치보다 속도가 1000배정도 빠른 주기억장치에서 실행한다. c언어에서는 파일과 같은 보조기억장치에 있는 내용을 읽어와 주기억 장치에 전송하여 사용한다. 그리고 파일을 다시 보조기억장치로 저장할 수 있다.
26. 함수가 호출될때 자동으로 처리되는 2가지는 무엇인가?
- 함수가 호출될 때 매개변수의 메모리 공간이 할당되고 인자값으로 초기화 된다.
27. 함수가 리턴될때 자동으로 처리되는 2가지는 무엇인가?
- 함수가 리턴될 때 임시변수가 생성 후 반환값으로 초기화 된 다음 함수 호출문이 임시 변수로 대체된다.
28. 하나의 프로젝트를 여러개의 소스파일로 구성할때 여러개의 소스파일에 같은 이름의 전역변수나 함수를 선언하면 컴파일할때 어떻게 되는가? 이유를 설명하라. 링크할때는 어떻게 되는가? 이유를 설명하라.
- 하나의 프로젝트를 여러개의 소스파일로 구성할 때 여러개의 소스파일에 같은 이름의 전역변수나 함수를 선언하게 되면 컴파일할 때는 컴파일러가 파일당 독립적으로 컴파일 하기 때문에 오류가 없고 컴파일러는 소스파일들을 오브젝트 파일로 변환한다. 그리고 링크할 때 여러 개의 오브젝트 파일들이 결합되면서 같은 이름의 전역변수와 함수가 여러번 정의 되어 오류가 생긴다.
첫댓글 메모리가 사라진다 큰일인데 이게 가능한가?
수정하고 내용 추가했습니다
13번 수정요
수정완료했습니다
@한윤지 PC에서 사용되는 보조기억장치는 어떤것이 있는가?
@Sungryul Lee PC에서 사용되는 보조기억장치에는 하드 디스크 드라이브(HDD), 소형 디스크 드라이브(SSD), 광학 디스크 드라이브, USB 플래시 드라이브, 외장 하드 드라이브 등이 있습니다