티스토리 뷰
상수와 변수
변하지 않는 값을 가리켜 상수라 한다.
상수는 프로그램을 실행 시 한 번 값이 결정되면 프로그램이 끝날 때 까지 다른 값으로 바뀌지 않는 정보이다.
데이터 저장 공간, 변수
정해지지 않는, 그래서 임의의 값을 대입할 수 있는 것을 변수라 한다.
C언어에서 이 변수는 값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리킨다.
그리고 프로그램이 실행되는 동안 지속적으로 값이 바뀌는 정보이다.
사용하고 싶은 자료형 타입을 쓰고 바로 뒤에 변수의 이름(별칭)을 적어주면 된다.
이 문장을 구성하는 각각의 요소들에 대해 알아보면
이다.
주의사항
변수 이름을 정할때 기억해야 할 것
1. 영문자 a ~ z, A~Z, 0~9 그리고 _(밑줄)을 사용할 수 있다.
2. 숫자로 시작하거나 모두 숫자로 구성되어서는 안된다.
3. 공백을 포함할 수 없다.
4. 대소문자를 구별한다.
5. C언어의 예약어는 변수 이름으로 사용할 수 없다.
변수 선언하기
변수를 선언한다는 것은 저장공간을 할당한다는 의미.
자신이 사용할 메모리 크기에 적합한 자료형(int, double, short 등등등...... )을 지정하여 선언한다.
변수 선언 문장 끝의 ;(세미콜론)은 구분자로서 사용된다.
int num1;
double num2;
같은 자료형으로 여러 개의 변수를 선언할 때 ,(쉼표)를 사용하여 한 줄로 선언할 수 있다.
int num1, num2;
변수 초기화하기
C언어는 메모리 청소를 하지 않는다. 이때 청소가 되어 있지 않는 메모리에 프로그래머가 변수를 선언하게 되면 이 변수에는 일정한 공간이 만들어지게 된다. 이 때 변수에 공간과 같이 아무런 의미가 없는 값이 들어가게 되는데, 이를 의미 없는 값을 쓰레기 값이라 한다. 가급적 이러한 쓰레기 값이 변수에 저장되지 않도록 하는 것이 좋다.
변수에 쓰레기 값을 대신해 초기값을 설정해 메모리를 깨끗하게 해주면 된다.
int value ;
=> 4바이트 크기의 value 변수에 어떤 값이 저장되어 있는지 모름
쓰레기 값이 들어가 있다.(정리되지 않은 메모리에 들어있는 값)
그래서
int value = 0 ;
=> 상수값 0을 넣어 초기화 시켜준다.
2진수를 16진수로 변환하는 방법
2개의 기호를 이용해서 데이터를 표현하는 방식을 가리켜 2진수라 하고, 16개의 기호를 이용해서 데이터를 표현하는 방식을 16진수라 한다.
2진수 : 0 ,1
16진수 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
2진수와 16진수는 4비트 단위로 나누어서 쉽게 변환할 수 있다,
& 컴퓨터는 0 과 1로 데이터를 표현하는데, 한 눈에 파악하기 어려움이 있다. 16진수를 이용하면 2진수를 간단히 표현하기 가능하다. 그래서 2진수보다는 16진수를 사용하는데 익숙해지는게 좋다.
함수
C언어와 함수 (중요한 파트)
C언어는 함수로 시작해서 함수로 끝난다는 말이 있다. 이 말은 즉슨, 정해진 순서에 의해 실행되는 함수 호출이
프로그램의 흐름이 되는 것이다.
함수란?
정해진 단위 작업을 수행할수 있도록 여러 개의 명령문들을 하나의 그룹으로 묶는 것이다.
한번에 모든 문제를 해결할 수 있는데 굳이 나누어 해결하는 이유는 무엇일까?
예를 들어 커다란 문제를 해결하기 위해 무작정 그 문제에 덤비는 것보다는 계획적으로 부분을 나누어 하나씩 정복해 나가는 것이 문제를 해결하는데에 속도도 빠르고, 정확성이 높일 수 있다.
프로그램도 마찬가지이다. 프로그램을 구현하기 위해, 구현에 필요한 기능들을 main 이라는 함수에 다 때려박는 것이 아니고, 기능들을 분석하고 그 결과를 바탕으로 작은 크기의 함수들을 구현한 후, 이들을 하나의 프로그램으로 엮어가야지 좋은 성능을 내는 결과물이 만들어지는 것이다.
그리고 함수를 나누면, 관리하기 편하고, 코드 내용을 쉽게 이해할 수 있다.
main 함수
프로그램은 정해진 순서에 의해 진행되는데, 제일 먼저 호출되는 함수가 바로 이 main 함수이다.
즉 프로그램의 시작점이라 할 수 있다. (처음 배우는 입장에서는 그렇다. 훗날 프로그램의 시작점을 main 함수 가 아닌 다른 함수로 바꿀 수 있다.)
컴파일러가 어떤 함수가 처음 시작되는 함수인지 알아야 번역 가능하므로 컴파일러에게 프로그램이 시작한다 고 알려주는 특별한 함수이다.
함수 정의하고 호출하기
함수 이름 : 함수가 하는 일을 짐작하기 쉽게 짓는 것이 좋다.
예를 들어 장비의 이름을 얻기 위한 함수를 짜고 싶다면 GetDeviceName()과 같이 짓자.
매개 변수 : 함수가 작업을 수행할 때, 필요한 데이터가 있다면 변수 단위로 명시, 입력형태에 매개변수를
명시해주면 된다.
작업 내용 : 함수가 작업할 내용을 중괄호 안에 명령문으로 나눔
int main (void){
printf("Hellow World!! \n");
return 0;
}
변환값 : 함수가 작업한 결과 값을 반환해야 할 때 사용 (위의 코드에서 return 0; 에 해당한다.)
함수 정의 : 코드를 써서 함수를 실제로 구현하는 행위, 실행이 가능한 함수를 말한다.
함수의 머리에 출력형태 int 를 생략할 수 있다.
만약 헤더에 void가 있으면 반환값이 정해져 있지 않는 것을 의미한다.
함수 호출
함수를 호출한다라는 말은 함수가 다른 함수를 사용하는 것을 의미한다.
C언어 프로그램은 함수가 다른 함수를 호출하면서 프로그램이 진행됨
호출자 : 함수를 호출하는 함수
피호출자 : 호출되는 함수
int Sum (int v1, int v2){
int result = v1 + v2; => 피호출자
return result; ->
}
int main (void){
int n1 = Sum (5,4); => 호출자
}
함수의 매개변수 - 역할이 정해져 있는 경우에 사용하는 것
매개변수 : 호출자에서 전달하는 값을 피호출자에서 전달받는 역할을 하는 변수
함수 내의 선언된 변수들은 해당 함수에서만 사용 가능
호출자에서 전달한 순서대로 피호출자의 매개변수가 값을 전달 받음
순서와 개수를 잘 맞추어야 한다.
매개변수 없는 경우
특별히 호출지로부터 넘겨받을 정보가 없다면, ()안을 비워두거나 ()안에
void를 적어 넣으면 된다.
반환값이란?
위의 소스 코드들에서 보이는 return이 바로 값을 반환시키는 역할을 하는 예약어이다.
return result1;
함수의 반환값은 return 뒤에 명시된 변수 값이나 상수 값이다.
함수가 값을 반환한다는 의미는 호출자의 어떤 변수에 값을 대입한다는 의미(위의 예제를 참조)
함수 이름 앞에 자료형이 없는 경우 int 가 생략된 것.
return의 또 다른 역할
return 문은 함수를 종료하는 기능을 가진다.
함수를 종결할 목적으로 return 문을 사용할 때는 반환값을 적지 않아도 오류가 발생하지 않는다.
Return 문을 두번 적으면 오류는 발생하지 않지만, 두번째 return 문은 실행하지 않는다.
return result1; //return는 함수를 종결을 의미
return result2; //이 문장은 실행되지 않음
함수 이름 짓는 방법
함수 이름은 함수를 구별하는 기준
변수 이름 짓는 법과 동일하다.
영문자 a ~ z, A~Z, 0~9 그리고 _(밑줄)을 사용할 수 있다.
공백 포함 불가, 컴파일러가 하나의 함수 이름으로 인식 불가
이름 전체를 숫자로 구성하거나 숫자로 시작하는 이름은 오류 발생
C언어 문법에서 이미 정의 해놓은 예약어는 함수의 이름으로 사용 불가
버그란 무엇인가?
구문 오류
프로그래밍 언어가 제공하는 규칙을 제대로 지키지 않을때 발생
컴파일하기 전에 비주얼 스튜디오에서 오류가 난 부분 빨간 줄로 표시
컴파일할때 컴파일러가 체크해서 알려준다.
논리적 오류
깡통이 있다. 처럼 문법적으로는 맞지만 의미적으로 돌릴 때 발생
기계어로 번역시 오류 없이 잘 번역되지만 프로그램 실행 시 오류 발생
버그가 발생했다 라고 표현
문법적으로 문제가 없기 때문에 컴파일러가 오류 사항을 체크하지 않음
디버깅 : 프로그래머가 버그를 해결하기 위해 작업하는 행위
버그는 습관때문에 걸리는 경우가 많다. 그렇기 때문에 버그가 생기는 이 버그가 생기는 이유랑
해결 방법등을 정확하게 알아 습관을 고쳐야 버그가 생길 확률이 적어진다.
프로그램의 시작 메인 함수
main 함수
C언어 프로그램은 main 함수가 시작 시점 (반드시는 아님)
한개의 프로그램에서 반드시 한개만 있어야 하는 함수이다.
메인 함수가 없거나 두개 이상 존재하면 번역시 오류 발생한다.
main 함수의 반환값
특정 프로그램이 다른 프로그램을 실행시키는 경우 실행시킨 프로그램의 상태를 알려주는 방법중 하나.
프로그램 상태를 알려주기 위해 메인 함수의 반환값을 int형 사용
return 1; 을 사용하여 프로그램이 정상적으로 종료되었음을 반환해줌
void 형을 반환하기
자신의 프로그램에 특별히 반환할 내용이 없는 경우 void를 사용하면 된다.
void GetDriveName (char ~ );
메인 함수의 매개변수
C프로그램은 명령 프롬프트로도 실행 가능
명령 프롬프트로 프로그램을 실행할 때도 실행 인자를 적을 수 있다.
실행 인자는 공백으로 구분
실행 인자들은 메인 함수의 매개변수로 전달 (char argv[]에서 읽어 들인다. 자세한 내용은 http://jihoon6078.tistory.com/38 여기서 확인)
int main (int argc, char argv[])
실행 파일 이름도 실행인자에 포함된다,
실행인자가 필요 없다면 매개변수 없이 메인()이라고 표시하거나 void 를 사용하면 된다.
함수 호출할 때 기억해야 할것
컴파일러는 C언어 소스코드를 기계어로 변역시, 위에서 아래로 쪽으로 번역 즉 순서대로 번역된다.
피호출자가 호출자 위에 있을 경우 번역에 문제가 발생하지 않음
함수의 원형
함수의 원형을 이해하기 위해서는 C 컴파일러의 컴파일 방식에 대해 알아야 한다.
C언어는 컴파일 방식을 이용하는데, 이 방식은 소스를 한 번에 쭉 읽어 기계어로 한꺼번에 번역하는 방식이다.
#include <stdio.h>
int main (void){
int a = 4, b = 5, m=0;
m = Max(a,b);
printf("a : %d, b : %d 인데, 두 수중 큰 값 %d \n",a,b,m);
}
int Max(int a, int b){
if(a>b){
return a;
}
else
return b;
}
이 코드를 빌드하면 오류가 나온다. 이유는 컴파일러가 한 번에 쭉 번역하면서 알지 못하는 함수가 나오게 되는데, 그 함수가 바로 Max이다.
main함수 뒤따라 바로 Max함수가 나오지만, 컴파일의 방식이 한 번에 쭉 읽어 내려오기 때문에 앞서서 함수를 선언하지 않으면, 오류가 발생한다.
이를 해결하기 위한 방법으로는 main함수 앞에 Max함수에 대한 정보를 컴파일러에게 미리 알려주는 것이다. 이것을 가리켜 "원형을 선언한다."라고 한다.
함수가 호출될 때 필요한 함수 : 이름, 매개변수, 반환 자료형을 포함한 표현식
함수 원형을 선언하면 컴파일러에게 소스파일에 해당 형식을 가진 함수가 존재하는 것을 미리 인지시킨다.
함수 원형을 사용하면 피호출자가 아래에 있어도 번역시 오류 발생하지 않는다. 함수 원형 선언 자체도 하나의 문장이므로 세미콜론은 반드시 있어야 한다.
int Max (int a, int b); // 이 문장을 main 함수가 시작하기 전 줄에 입력해줘야 한다.
매개변수 이름의 생략
컴파일러의 입장에서는 매개변수 개수와 자료형만 신경쓴다.
함수 호출 구조를 만들 때 매개변수 정보는 개수나 자료형만 사용하기 때문이다.
그래서 매개변수 이름 생략 가능하다.
단점
매개 변수 이름을 생략하면 프로그래머가 원형만으로 전달되는 변수의 의미 파악 불가하다.
그래서 매개 변수의 이름은 생략하지 않는 것이 좋다.
표준 출력 함수 (화면에 값을 출력하는 방법)
: 화면에 값을 출력하는 방법으로 C언어가 우수한 이유가 된다.
라이브러리
C언어에서 좀 더 효과적으로 함수를 관리할 수 있도록 제공하는 기술로,
지속력으로 업데이트가 필요한 함수들만 소스 파일에 유지하고, 바뀌지 않는 함수들을 따로 분리하여 관리할 수 있다.
라이브러리 파일은 실제 사용하는 내용만 실행 파일에 포함한다.
라이브러리 파일(*.lib)이 등장한 이유
오브젝트 파일을 재변경한 것이 라이브러리 파일이다.
지능적으로 실행파일을 만들어 준다.
자신이 작업하는 소스파일 목록 중에서 변경 가능성이 없는 파일들을 다른 곳에 보관해두고,
소스파일 대신 목적 파일을 소스 목록에 포함시켜 작업하여 효율성을 높인다.
라이브러리 사용 설명서, 헤더 파일
라이브러리 파일에 있는 함수를 사용하기 위해 각 함수 원형을 선언함.
매번 사용하기는 귀찮으니, 헤더 파일에 함수 원형을 미리 선언하여 사용한다.
전처리기
전처리기는 말 그 대로 앞서 먼저 처리하는 명령 이라는 뜻인데, 컴퍼일하기 전에 소스를 재작성하는 역할을 한다.
전처리기 문법은 #기호로 시작하며 기계어로 번역되는 명령문이 아니기 때문에 문법 끝에 ; 세미콜론을 사용하지 않는다.
#include 전처리기
#include 전치리기는 컴파일러에 자신이 명시한 파일을 읽도록 지시한다.
#include <헤더 파일 이름> -> 비주얼에서 제공하는 헤더 파일을 포함할 때
#include "헤더 파일 이름" -> 프로그래머가 정의에 사용하는 헤더 파일을 포함할 때
"" 프로그래머가 정의한 파일을 의미하기에, 먼저 사용자의 폴더에서 해당 파일을 찾고 없으면, 시스템의 폴더에서 찾는다.
#define 전치리기는 상수나 명령문을 치환하는 문법이다.
#define 문법으로 상수 치환하기
# define MAX_COUNT 3 => 3이라는 상수를 MAX_COUNT로 치환
# define MAX_COUNT 3
int data = MAX_COUNT
# define 문법으로 명령 치환하기 (매크로 함수 , 지금은 인라인으로 사용)
# define POW_VALUE(a) (a+a)
int data = POW_VALUE(3) ; // int data = 3+3으로 번역된다.
C 표준 라이브러리
운영체제 별로 기술적 기반이 다르기 때문에 화면에 문자 A를 출력하는 과정과 방법도 다르다.
C언어가 문자 출력 기능을 문법으로 제공한다면?
환경이 변환시 이를 수용하기 위해 C언어 문법까지 변경해야하는 문제가 발생한다.
C언어는 문자를 출력하는 것과 같이 시스템에 영향을 받는 요소들은 고정된 문법으로 제공하지 않는다.
-> c언어는 자신의 기능을 확장하기 위해 함수라는 개념을 제공한다.
C언어 표준 함수 |
C언어 컴파일러를 만든 회삿에서 운영체제 별로 다양한 기능을 구현하여 제공하는 함수 |
C 표준 라이블러리 |
C언어 표준 함수들이 정의된 라이브러리 |
표준 출력 함수
표준 출력 : 표준 출력이란 해당 시스테엠이 가장 기본으로 사용하는 출력 방식을 말한다.
표준 출력 함수
Putchar, putc : 단일 문자 출력 함수
Putchar(65) => A가 출력
Putchar("A") => 문자 A가 출력
Puts 문자열 출력 함수
Puts("HI") => HI가 출력된다.
'TIPS' 카테고리의 다른 글
[TIPS 프로그래밍 강좌] 6차시 정리 (0) | 2017.01.18 |
---|---|
[TIPS 프로그래밍 강좌] 5차시 정리 (0) | 2017.01.15 |
[TIPS 프로그래밍 강좌] 4차시 정리 (0) | 2017.01.14 |
[TIPS 프로그래밍 강좌] 3차시 정리 (0) | 2017.01.08 |
[TIPS 프로그래밍 강좌]1차시 정리 (0) | 2016.12.30 |
- Total
- Today
- Yesterday
- 팁스강좌
- 이미지게임
- arp
- 오일러 프로젝트 16번
- 오일러 프로젝트 14번
- tipsr강좌
- 서버
- 오일러 프로젝트 10본
- 실행 압축
- 오일러 프로젝트 8번
- 오일러
- 2의 1000승
- Omok
- 약수 500개
- MFC
- 오일러 프로젝트 12번
- CBrush
- tipsoft
- 키보드 메시지 이벤트
- 허프만 알고리즘
- 오일러 프로젝트 11번
- 화투이미지맞추기
- 패킷
- 와이어샤크
- TIPS강좌
- 오일러 프로젝트 13
- 헤더
- 비손실 압축
- tipssoft
- Tips
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |