파일의 분할 외부에 선언 및 정의되었다고 컴파일러에게 알려줘야 한다. extern int num; // int형 변수 num이 외부에 선언되어 있다. extern void Increment(void); // 함수는 extern 생략 가능 다른 파일에서 접근을 못하게 하고 싶다면 static 둘 이상의 파일을 컴파일하는 방법과 static에 대한 고찰 1. 이미 만들어진 파일을 프로젝트에 추가하는 방법 2. 프로젝트에 파일을 추가한 다음에 코드를 삽입하여 컴파일하는 방법 헤더 파일의 디자인과 활용 #include : 파일의 내용을 단순히 포함시키는 용도(그 이상도 이하도 아닌 포함) 헤더파일을 include 하는 두 가지 방법 1. #include 표준 헤더파일이 저장되어 있는 디렉터리에서 파일을 찾게된다..
선행처리기와 매크로 실행파일은 선행처리, 컴파일, 링크의 과정을 거쳐서 만들어진다. 선행처리가 하는 일은 삽입해 놓은 선행처리 명령문대로 소스코드의 일부를 수정하는 것이다. ex) #define PI 3.14 =>PI를 3.14로 수정 #include도 선행처리 명령문(stdio.h 파일의 냉요을 이곳에 가져다 놓으세요) 대표적인 선행처리 명령문 #define : Object-like macro #define PI 3.1415 지시자 매크로 매크로 몸체 이어서 등장하는 매크로(PI)를 마지막에 등장하는 매크로 몸체(3.1415)로 치환하라 PI와 같은 매크로를 오브젝트와 유사한 매크로, 또는 매크로 상수라고 한다. 매크로는 대문자로 #include #define NAME "홍길동" #define AGE ..
프로그램을 실행하면 해당 프로그램의 실행을 위한 메모리 공간이 운영체제에 의해서 미리 마련이 된다. 그리고 바로 이 메모리 공간 내에서 변수가 선언되고, 문자열이 선언되는 것이다. 운영체제에 의해 할당된 메모리의 구조 코드 영역, 데이터 영역, 힙 영역, 스택 영역 코드 영역 실행할 프로그램의 코드가 저장되는 메모리 공간. 따라서 CPU는 코드 영역에 저장된 명령문들을 하나씩 가져가서 실행 데이터 영역 전역변수와 static으로 선언되는 static 변수가 할당된다. 즉 프로그램의 시작과 동시에 메모리 공간에 할당되어 프로그램 종료 시까지 남아있게 된다. 스택 영역 지역변수와 매개변수가 할당된다. 이 영역에 할당된 변수들은 선언된 함수를 빠져나가면 소멸된다. 힙 영역 프로그램을 구현하다 보면, 이 데이터..
텍스트 데이터와 바이너리 데이터를 동시에 입출력하기 서식에 따른 데이터 입출력 : frpintf, fscanf fscanf는 파일의 끝에 도달하거나 오류가 발생하면 EOF를 반환한다. 쓰기 #include int main(void) { char name[10]; char sex; int age; FILE* fp; fopen_s(&fp,"friend.txt", "wt"); int i; for (i = 0; i < 3; i++) { printf("이름 성별 나이 순 입력: "); scanf_s("%s %c %d", name,10, &sex,1, &age); getchar(); //버퍼에 남아있는 \n의 소멸을 위해서 fprintf(fp, "%s %c %d", name, sex, age); } fclose(f..
파일과 스트림, 그리고 기본적인 파일의 입출력 fopen 함수호출을 통한 파일과의 스트림 형성과 FILE 구조체 #include FILE * fopen(const char * filename, const char * mode); => 성공 시 해당 파일의 FILE 구조체 변수의 주소 값, 실패 시 NULL 포인터 반환 FILE * fp = fopen("data.txt", "wt"); // 출력 스트림의 형성 FILE * fp = fopen("data.txt","rt"); // 입력 스트림의 형성 fopen(출력)write #include int main(void) { FILE * fp=fopen("data.txt", "wt"); if(fp==NULL) { puts("파일오픈 실패!"); return -1..
typeof 선언 : 기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것을 목적으로 하는 선언 typeof 선언에 있어서 새로운 이름의 부여는 가장 마지막에 등장하는 단어, 구별 위해 앞에 대문자로 표시 typeof int INT, typeof unsigned int UINT, typeof struct point POINT #include struct point { int xpos; int ypos; }; typedef struct point Point; typedef struct person { char name[20]; char phoneNum[20]; int age; } Person; //person을 생략해도 돼. 단, struct person man;은 불가능(어차피 안해) int main(..
구조체 : 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구 struct person{ char name[20]; char phoneNum[20]; int age; }; 구조체 변수 : struct type_name val_name; struct person man; 구조체 변수에 접근 man.name="홍길동"; 구조체 변수에 문자열 저장을 하려면 strcpy 함수를 호출해야 한다. ex) strcpy(man1.name, "홍길동"); 구조체 변수에 초기화 과정에서는 문자열 저장을 위해서 strcpy 함수를 호출하지 않아도 된다. ex) struct person man={"홍길동", "010", 22}; 구조체 배열 struct point arr[4]; 구조체 변수와 포인터 #include st..
문자와 문자열 관련 함수 프로그램상에서 모니터와 키보드를 대상으로 데이터를 입출력 하기 위해서는 이들을 연결시켜주느 다리가 필요 다리의 역할을 하는 매개체 : 스트림(한 방향으로 흐르는 데이터의 흐름) 콘솔 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램이 실행되면 자동으로 생성되고, 프로그램이 종료되면 자동으로 소멸되는 스트림이다. stdin 표준 입력 스트림 키보드 대상으로 입력 stdout 표준 출력 스트림 모니터 대상으로 출력 stderr 표준 에러 스트림 모니터 대상으로 출력 문자 출력 함수 : putchar, fputc int putchar(int c); int fputc(int c, FILE * stream); => 함수호출 성공 시 쓰여진 문자정보가, 실패 시 EOF 반환 문자 ..