C언어/C언어 문법 (51) 썸네일형 리스트형 [C언어] 포인터 선언과 메모리 관리 포인터 변수 선언 포인터 변수를 선언할 때 아래와 같은 형태로 선언을 할 수 있다. #include struct Box{ int width; int height; int length;};int main(){ struct Box* box_a; box_a.width = 10; box_a.height = 20; box_a.length = 20; return 0;} 그러나 위 코드처럼 선언한 포인터 변수를 바로 사용하게 되면 메모리 에러가 발생할 수 있다. 포인터 변수를 선언하면 변수의 주소를 담기 위한 8byte의 공간을 할당할 뿐구조체의 메모리 공간은 따로 할당하지 않기 때문이다. 따라서 포인터 변수를 선언하고 해당 포인터 변수가 가리키는 주소에 메모리를 할당해 주.. [C언어] 열거형 (enum) 열거형 (enum) 열거형은 const int 자료형을 같은 의미끼리 묶어서 정의할 때 사용된다. 열거형을 정의할 때에는 이름도 같이 정의해주면 열거형 변수를 선언하여 사용하는 것도 가능하다. 그러나 필수는 아니다. 정수이기 때문에 홀로 변수처럼 사용도 가능하며 변수에 대입도 가능하다. 따라서 아래 코드처럼 사용이 가능하다. #include enum DayOfWeek { Monday = 0, Tuesday = 1, Wednesday = 2, Thursday = 3, Friday = 4, Saturday = 5, Sunday = 6 }; int main() { enum DayOfWeek week = Monday; int intweek = Tuesday; printf("%d %d %d", Wednesday,.. [C언어] 헤더파일, #include의 활용 헤더파일 헤더파일을 include 하는 방식에는 2가지 방법이 있다. 첫 번째는 를 사용하는 방식이고 두 번째는 ""를 사용하는 방식이다. 첫 번째 방식을 사용하면 표준 헤더파일이 저장되어 있는 디렉터리 안에서 파일을 찾게 된다. 따라서 이 방식은 #include 와 같이 표준 헤더파일을 include 할 때 사용된다. 두 번째 방식을 사용하면 기본적으로는 소스파일이 저장된 디렉터리 안에서 헤더파일을 찾는다. 이때 헤더파일의 이름과 함께 절대경로를 명시하여 include 하면 헤더 파일이 어디 있던 사용이 가능해진다. 따라서 두 번째 방식은 사용자가 정의한 헤더파일을 포함시킬 때 사용된다. 헤더파일은 마치 매크로와 같은 역할을 한다. 해당 부분을 헤더파일이 완벽히 대체하게 되는 것이다. 따라서 아래와 같.. [C언어] 파일의 분할 (extern, static) extern extern 선언을 통해 다른 파일에 선언된 변수나 함수 등을 사용할 수 있다. 이때 파일끼리 같은 프로젝트 내에 있기만 하면 구체적으로 어느 파일에 있는지는 알리지 않아도 된다. test1.c #include int num = 0; extern void increase(); extern int getnum(); int main() { printf("num : %d\n", getnum()); increase(); printf("num : %d\n", getnum()); increase(); printf("num : %d\n", getnum()); return 0; } test2.c extern int num; void increase() { num++; } int getnum() { retu.. [C언어] 파일 입출력, 파일 스트림 생성 (fopen, fclose) 파일 스트림 (File Stream) 프로그램 안에서 파일에 저장되어 있는 데이터를 참조하고 싶을 때 우선 파일 스트림을 형성해야 한다. fopen 파일 스트림은 fopen 함수호출을 통해서 형성할 수 있다. fopen 함수의 반환형과 요구하는 매개변수는 다음과 같다. FILE* fopen(const char* filename, const char* mode); fopen 함수는 스트림을 형성할 파일 이름과 스트림의 종류를 매개변수로 요구하며 스트림을 형성한 후 스트림과 파일의 정보를 FILE 구조체 변수에 담아서 그 변수의 주소값을 반환한다. 여기서 FILE은 기본 자료형이 아니기 때문에 구조체라는 것을 알 수 있다. 파일 개방 모드 C언어에서는 스트림의 성격에 따른 6가지의 파일 개방 모드가 존재한다.. [C언어] 조건부 컴파일 매크로 (#if, #elif, #endif, #ifdef, #ifndef) 조건부 컴파일 매크로 조건부 컴파일 매크로는 조건문과 매우 유사한 역할을 한다. 조건에 따라 해당 파일의 코드 일부를 실행하거나 건너뛸 수 있다. 조건부 컴파일 매크로의 지시자에는 #if #elif #else #ifdef #ifndef 가 있다. 조건부 컴파일 매크로는 조건문과 마찬가지로 주어진 조건이 참이라면 범위 내의 코드를 컴파일하고 그렇지 않다면 해당 코드를 버린다. 이때 범위를 지정하는 방법으로 #endif를 사용하여 #if 가 끝나는 지점을 정의해주어야 한다. 따라서 아래 코드처럼 사용이 가능하다. #include int main() { int i = 55; #if i < 50 printf("i is small"); #elif i < 100 printf("i is normal"); #else .. [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}}; .. 이전 1 2 3 4 ··· 7 다음