본문 바로가기

728x90
반응형

분류 전체보기

(162)
[C언어] 매크로 (define, 오브젝트 유사 매크로, 매크로 함수) 선행처리 컴파일러가 파일을 컴파일하기 전 선행처리기에 의해서 일어나는 처리과정을 선행처리라고 한다. 오브젝트 유사 매크로 (Object-like macro) 오브젝트 유사 매크로를 사용하는 방법은 define 지시자를 명시해 주고 매크로 이름과 매크로 몸체를 명시해 주면 된다. 이것은 단순히 코드 안의 매크로를 매크로 몸체로 치환하는 역할을 한다. #define PI 3.14 즉 해당 파일 안의 모든 PI를 3.14로 치환하겠다는 의미이다. 매크로 함수 (Function-like macro) 매크로 함수의 선언도 오브젝트 유사 매크로와 동일하게 define 지시자를 명명해 주면 된다. 예를 들어서 함수 하나를 작성해보겠다. #define SQUARE(X) X*X 위 코드처럼 작성하면 파일 내의 SQUAR..
[C언어] 구조체의 중첩 구조체의 중첩 구조체도 반복문이나 조건문처럼 중첩하여 사용하는 것이 가능하다. 이미 정의된 구조체의 자료형을 새로운 구조체를 선언할 때 사용하는 것이다. 따라서 아래 코드처럼 중첩하여 선언하는 것이 가능하다. typedef struct { float x; float y; }Pos; typedef struct { float radius; Pos cen; } Circle; 중첩된 구조체에는 도트연산자를 중첩하여 사용하는 것으로 접근이 가능하다. 따라서 위에서 선언된 x와 y에 접근하고 싶다면 아래 코드처럼 사용하면 된다. Circle CircleA; CircleA.cen.x = 5.5; 초기화를 할 때에도 중괄호를 중첩하여 선언해 주면 된다. Circle CircleA = {5.5, {3.5, 4.5}}; ..
[C언어] 함수로의 구조체 변수 전달과 구조체 반환 함수 Call_By_Value로 구조체의 반환과 전달 구조체도 함수를 통해 반환되거나 매개변수로써 함수에 전달될 수 있다. 구조체를 반환하는 함수를 선언하는 방법은 자료형 대신에 구조체의 이름을 사용자 정의 자료형으로 정의한 후 그 이름을 넣어주면 된다. 예시로 구조체를 반환하고 전달하는 함수를 사용하여 두 점의 거리를 구하는 코드를 작성해 보겠다. #include typedef struct { int x1; int x2; } X; X Plus (X pos) { pos.x1++; pos.x2++; return pos; } int main() { X pos1 = {5, 10}; X pos2; pos2 = Plus(pos1); printf("%d %d\n", pos1.x1, pos1.x2); printf("%d ..
[C언어] 사용자 정의 자료형(typedef), 구조체 typedef 선언 typedef typdef 선언을 통해 기존에 존재하던 자료형에 새로운 이름을 부여할 수 있게 된다. 예를 들어 아래 코드와 같이 선언하게 되면 int 에 또 다른 이름으로 INT를 부여해 줄 수 있다. typedef int INT; 따라서 아래 두 가지 선언은 둘 다 정수형 변수를 선언하는 코드라고 할 수 있다. #include typedef int INT; int main() { int num1 = 10; INT num2 = 20; printf("%d %d", num1, num2); return 0; } 위 코드를 실행해 보면 num1 과 num2 에 저장된 값이 정상적으로 출력되는 것을 확인할 수 있다. typedef 선언을 할 때 이름이 여러 개이면 가장 마지막에 나오는 단어가 새로운 이름이 된다..
[C언어] 구조체(struct), 구조체 배열, 구조체 포인터, 화살표 연산자, 구조체 변수의 주소값 구조체 구조체를 사용하면 여러 가지 변수들을 하나로 묶는 것이 가능하다. 예를 들어 30명의 학생들의 5가지 신상정보를 기록하려고 할 때 150가지 변수를 선언할 필요가 없게 되는 것이다. 구조체를 선언하는 방법은 아래 코드와 같다. struct Information { char name[20]; int age; int stdID; char gender; char address[100]; }; 구조체 변수를 사용하려면 구조체를 선언한 후에 구조체 변수도 선언해주어야 한다. 구조체 변수는 'struct 타입이름 변수이름;' 의 형태로 선언할 수 있다. 구조체 변수를 선언한 후에는 연산자 . 을 통해 접근할 수 있다. 초기화를 할 때에는 배열에 넣을 때와 마찬가지로 중괄호 안에 데이터를 넣고 쉼표를 사용하여..
[C언어] 버퍼(Buffer), 입출력버퍼 비우기(fflush) 버퍼 (Buffer) 지금까지 써왔던 scanf와 printf 등 stdio.h 에서 제공하는 표준 입출력함수들을 사용할 경우 해당 데이터들은 운영체제가 제공하는 '메모리 버퍼'를 중간에 통과하게 된다. 키보드로 데이터를 입력할 때 한 글자 한 글자 입력할 때마다 즉시 프로그램으로 전달되는 것이 아니라 일단 입력버퍼에 저장된 다음에 프로그램으로 저장되는 것이다. 이때 입력버퍼에서 프로그램으로 데이터가 전달되는 시점은 엔터 키가 눌리는 시점이다. 이 일련의 작업을 버퍼링(Buffering)이라고 한다. 그렇다면 버퍼링을 하는 이유는 무엇일까? 데이터를 하나씩 전달하는 것보다 여러 개의 데이터를 한 번에 전달하는 것이 빠르고 효율적이기 때문이다. 출력버퍼 비우기 출력버퍼가 비워진다는 것은 데이터가 메모리버퍼..
[C언어] 파일 입출력 함수 (fputc, fputs, fgetc, fgets, putchar, getchar, puts, gets) 문자 입출력 함수 (putchar, getchar) putchar 함수와 getchar 함수의 경우 문자를 입출력하는 함수이다. 함수의 반환형과 요구하는 매개변수의 자료형은 아래와 같다. int getchar(void); int putchar(int c); putchar 의 인자로 출력할 문자를 전달해 주면 된다. 따라서 입출력함수는 아래 코드처럼 사용이 가능하다. #include int main() { int ch; ch = getchar(); putchar(ch); return 0; } 문자열 입출력 함수 (puts, gets) 문자열 입출력 함수는 문자 하나만이 아니라 문자열 자체를 입출력할 수 있다. 함수의 반환형과 요구하는 매개변수의 자료형은 아래와 같다. char* gets(char* s); ..
[C언어] 스트림(Stream), EOF 스트림 (Stream) 쉽게 말해서 스트림이란 데이터의 이동경로를 의미한다. 데이터는 어디서 와 어디로 가는가? 가장 일반적으로 떠올릴 수 있는 대답은 키보드로 입력받은 데이터가 프로그램으로 흘러들어 가거나 반대로 프로그램에서 데이터를 모니터로 출력하는 경우일 것이다. 그러나 마우스, 프린터, 화상 카메라, 스캐너, 파일 등도 데이터 입력 대상이 될 수 있고 스피커, 파일 등도 출력의 대상이 될 수 있다. 이렇게 데이터 입출력 대상의 범위는 매우 넓고 포괄적인 의미가 있다. 그런데 모니터로 문자열을 어떻게 출력할 수 있는 걸까? 정확히 말해서 printf 함수 호출 시 어떤 과정을 거쳐서 문자열이 출력되는 것일까? 운영체제에서는 데이터를 외부로 출력하거나 외부에서 입력받을 수 있는 소프트웨어적인 가상의 ..

728x90
반응형