본문 바로가기

2학년/C

(19)
[C] 전처리기 전처리 선행처리란, 행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 전처리문을 모두 치환하는 작업이다. 이러한 전처리 작업은 컴파일하기 전 전처리기에 의해 먼저 처리된다. 전처리기는 코드를 생성하는 것이 아니라, 컴파일러가 컴파일하기 좋도록 소스를 재구성해주는 역할만을 한다. 전처리문 1)전처리 문자(#)로 시작한다. 2)코드 내에서 하나의 라인을 모두 차지하며, 전처리문 뒤에 C언어 코드를 추가하여 같이 사용할 수 없다. (주석 예외) 3)맨 뒤에 세미콜론을 붙이지 않는다. 4)전처리문은 어디서나 작성 가능하지만, 전처리문은 그 문장이 위치한 곳에서부터 파일 끝에까지만 기능한다. 전처리 지시자 1)#include 해당 전처리 지시자는 외부에 선언된 함수나 상수 등을 사용하기 위해서 헤더 파일을 현..
[C] 입출력 입출력 버퍼(buffer) 표준 입출력 함수를 사용할 때에는 버퍼라는 임시 메모리 공간을 사용하게 된다. 1) 데이터를 특정 기준으로 바인딩한 후 한 번에 묶어 전송한다. (전송 시간이 줄어 성능 향상) 2) 버퍼가 전송되기 전까지 보관하고 있기 때문에 사용자 측에서 내용의 수정이 가능하다. 3) 입력장치에 독립적으로 사용할 수 있다. scanf함수는 키보드와 직접 연결되지 않고 정해진 크기와 형태를 가진 버퍼에서 입력을 받는다. 버퍼링 방식 1. 완전 버퍼링 : 버퍼가 포화상태 -> 즉시 전송 2. 라인 버퍼링 : 입력도니 문자 중 개형('\n') 문자 만나면 전송 * 입력 버퍼 비우기 : getchar() 함수 / 출력 버퍼 비우기 : fflush() 함수 파일 입출력 파일 C에서는 파일을 바이트별로..
[C]문자와 문자열(2) 문자열 입력받기 1. fgets() 함수 이 함수는 scanf()함수와 달리, 파일에서도 문자열을 입력받을 수 있는 함수이다.(키보드+파일) 인수로는 문자열을 가리키는 포인터, 문자열의 길이를 넣는 변수, 파일을 가리키는 파일 포인터 등이 있다. 2. scanf() 함수 stdin(키보드)를 통해 문자열을 입력받는다. 서식지정자로는 %s를 사용하며, 기본적으로 공백문자를 만날 때까지만 입력받는다. 즉, 깁노적으로 공백 다음에 오는 문자열은 저장되지 못하고 유실된다. 문자열 출력하기 1. puts() 함수 stdout인 모니터에 한의 문자열을 출력하는 함수이다. 문자열 출력한 후 자동으로 줄을 바꿔준다 인수로 문자열을 가리키는 포인터를 전달한다. 2.fputs() 함수 모니터뿐만 아니라 파일을 통해서도 문..
[C]문자와 문자열(1) 스트림(Stream) 모든 입력과 출력을 바이트들의 흐름으로 생각하는 개념이다. 즉 장치에 독립적으로 바이트 단위로 입출력이 이루어지는 개념을 말한다. C언어에서는 스트림을 이용해 입출력을 지원한다. #include 에서 stdio는 standard input/output 의 준말이다. 표준 스트림은 프로그래머가 만들지 않아도 자동으로 생성되는데, 프로그램이 시작될 때 자동으로 만들어지고 종료될 때 자동으로 사라진다. --> 표준스트림 : stdin (표준입력 )/ stdout (표준출력) / stderr (표준오류) C언어는 stdin 표준 스트림을 통해 입력 장치를 다루며, stdout 표준 스트림을 통해 출력장치를 다룬다. *scanf() 함수는 기본적으로 stdin 스트림을, printf()는 기..
[C]함수(2) 매개변수의 호출방식 #include int add(int n, int m){ return n + m; } int main(void){ int a =3; b=5; printf("%d", add(a,b)); } add() 함수의 주소는 컴파일 타임에 스택메모리에 적재되어 있었을 것이다. 순서대로 인수 a와 b가 아닌 add함수 내부의 지역변수 n과 m이 연산의 주체가 된다. 따라서 n에는 3, m에는 5가 저장되어 있고, return은 n+m 이므로 8이 출력된다. 함수의 인수(argument)와 매개변수(parameter) 위의 예시에서 int n, int m 은 매개변수인 반면에 a,b는 인수이다. 인수란 '값, 변수, 참조등에 전달되는 원본 값'이고 매개변수란 '인수로부터 전달받은 값을 저장하는 함수 ..
[C]함수(1) 함수 C언어는 함수가 기본단위인 언어이다. 함수는 프로그램에서 자주 수행될 동작을 미리 정의하고 재사용 가능하게 해줌으로써 전체 생산성을 향상시킨다. 함수의 구조 반환자료형 함수이름 ( 매개변수 ) { return 반환값; } 1. 반환 자료형 : 함수가 어떤 연산의 결과로 값을 반환한다면, 반환하는 값의 자료형 2. 함수 이름 : 프로그램 내에서 함수를 식별할 수 있는 이름 3. 매개변수 : 함수가 연산을 실행하기 위해 입력값이 필요할 때, 그 입력받는 값을 의미한다. 자료형과 함께 별명을 지정해주어야 한다. 4. 몸체 : 함수가 호출되었을 때 실제로 수행할 작업들이 정의된 블록 {}. 5. 반환값 : 함수가 몸체의 작업들을 모두 수행하고, 연산의 결과로써 시스템에 반환하고자 하는 값이 있다면 retu..
[C]사용자 지정 타입 구조체와 포인터 구조체 포인터는 struct 구조체이름* 구조체포인터이름; 으로 선언된다. 배열과 달리 구조체의 이름은 구조체를 가리키는 주소가 아니기 때문에 주소 연산자를 사용해주어야 한다. 구조체 포인터를 이용하여 멤버변수에 접근하는 방법은 1) 참조연산자(*) 2)화살표 연산자(->)를 이용하는 방법이 있다. ex) (*ptr).x || ptr -> x 참조연산자보다 멤버연산자의 우선 순위가 높기 때문에 괄호를 쳐주어야 예상대로 작동한다. 중첩된 구조체 멤버변수로 구조체를 가져 중첩되게 구현할 수 있다. typedef strcut { char surname[10]; char name[20]; )name; typedef struct { name student_name; )student; int mai..
[C]사용자 지정타입(1) 구조체 사용자가 C언어에 있는 기본 타입을 조합함으로써 새롭게 정의한 사용자 정의 데이터 타입을 말한다. 예로 들어, 우리가 "회원가입"을 구현한다고 생각해보면, 회원 1명은 이름, 연락처, 생년월일, 등급, 나이, 포인트 등의 정보를 갖는다고 정의해보자. 그렇다면 회원 1명을 선언할 때마다 이에 대한 선언문을 일일이 다 추가해야한다. 똑같은 기능을 가진 코드를 계속 선언해주어야하기 때문에 상당히 비효율적으로 느껴진다. 이럴 때 "구조체 키워드" 를 통해 "user"라는 구조체 타입을 선언함으로써 해결할 수 있다. #include struct 원하는 이름 { 자료형 멤버변수1; 자료형 멤버변수2; ... }; struct 키워드를 사용한 후, 희망하는 식별자명을 기재하면 해당 자료형의 구성요소를 블록 내..