// include main 생략
gets("%s") // 보안이슈 있음 오버플로우 터짐
gets_s("%s",sizeof(a)); // 윈도우에서
fgets("%s",sizeof(a),stdin); // 리눅스 계열에서는 이렇게
1.함수의 정의
함수란?
- 특정한 작업을 하도록 만들어진 독립적인 단위 모듈
- 큰 프로그램 하나를 여러 개의 함수로 분할하여 구현하는 구조적 프로그래밍
- 함수에 입력시키는 것을 매개변수(parameter) or 전달인자(argument)라고 한다
- 함수가 돌려주는 결괏값을 반환값 또는 리턴값(return value)라고 한다.
- 자판기 함수의 경우 동전이나 버튼이 매개변수나 인자값이 되고 커피가 리턴값이 된다.
2.변수,함수,전달인자, 매개변수, 반환값
- 변수란 어떤값을 저장하는 메모리 장소를 의미한다.
- 함수란 특정한 작업을 하도록 만들어진 독립적인 단위모듈이다.
- [parameter] 매개변수란 함수를 정의할때 사용되는 변수를 의미한다.
- [argument] 전달인자란 함수를 호출할 때 실제로 넘기는 변수값을 의미한다.
- [retrun value] 반환값이란 함수가 실행을 마친뒤 돌려주는 값이다.
3.토큰(token)과 구두점
- 토큰
- C프로그램을 구성하는 기본 단위
- 예약어(reserved word) int,if...44개
- 연산자(operator):+ / 등 40여개
- 구두점(punctuator) : [], ()등 50여개 (40여 개는 연산자로 사용)
- 식별자(identifier) : 변수, 함수, 배열, 구조체 등의 이름
- 리터럴(literal) or 상수(constant) :10 , 3.5
- 문자열(string):"hello"
- 구두점
- 토큰을 구분하기 위해 사용하는 기호로 50여 개가 있는데 40여 개는 연산자로 사용한다
- [], (), {}, *, 콤마(,), ;, =, :,..., “”
4.예약어(reserved word, keyword)
- 컴파일러에 의해 미리 의미가 정해져 있는 32~44개의 단어
- 항상 소문자로만 사용 해야한다
- C99에서 추가된 예약어들
- inline, restrict, _Bool, _Complex, _Imaginary
- 제어문(반복문) = for, while, do
- 제어문(선택) = if, else, switch, case, default
- 제어문(점프) = break, cnotinue, goto, return
- 자료형 = char, int, short, long, float, double,signed, unsigned, structm union, typedef, enum, void
- 자료형의 반환값 없음은 void다
- 기억 클래스 = auto, static, extern, register
- 기타 = constm sizeof, volatile
- 리터럴은 상수나 변수에 저장되는 값 자체이다.
5.기본 자료형의 크기 - 암기하면 좋음
표현범위는 최소 , 최대값으로 나누어진다.
long long 자료형은 정수형 int형 연산에서 초과되는 범위를 다룰 때 많이 사용한다.
float는 7개의 자릿수
double은 15개의 자릿수를 가짐
6.이스케이프 시퀀스(확장 문자열)
- 이스케이프 시퀀스 (escape sequence)는 탈출 문자 or 확장 문자열 이라고도 한다
- 역슬래시 \와 영문자나 특수문자로 이루어진다
- 문자 상수 내에서 개행(new line)문자, 작은 따옴표, 큰 다옴표, 특별한 의미를 갖는 문자 등을 낱내기 위해서 사용하낟
- 두 개의 문자로 보이지만 두 개의 문자가 하나의 의미를 가지는 단일 문자 1byte 이다
[ \n : 개행 , \t : 수평탭 , \r : carriage return, \b : back space, \a : 내장 벨소리 출력 , \\ : \ 출력 , \' : '출력 , \" : " 출력, \? : ?출력, %% : %출력 ]
ex) 오늘의 "수익률"은 10% 입니다.
printf("오늘의 \"수익률\"은 10%% 입니다.");
7.문자와 문자열의 차이
문자는 한 글자를 의미하고(char) 문자열은 여러 개의 문자가 결합한 것을 의미한다(string) c에선 char [] 배열
8.ASCII 65번째는 'A' || 97번째는 'a' 이다
9.float와 double의 차이
float와 double은 모두 실수를 표현하는 자료형으로, double이 float보다 정밀도가 높다
|
float
|
double
|
정밀도
|
7자리 정도
|
15자리 정도
|
바이트
|
4byte(32bit)
|
8byte(64bit)
|
값의 범위
|
3.4E +/- 38
|
1.7E +/- 308
|
10. scanf()함수의 서식 지정자
scanf 에서 처럼 실수형 입력은 %lf를 사용해주어야한다(float, double)
11.변수 여러개 입력받기
int a, b, c;
int a=10, b=11, c=12;
12.문자열 공백 포함 입력받기
//include main 스킵
gets(a)
gets_s(a,sizeof(a); //window
fgets(a,sizeof(a),stdin); // mac,linux
12.매크로와 함수같은 매크로 차이점
매크로는 빠르지만 디버깅 어려운 텍스트 치환을 사용
함수는 안전하지만 호출 하지만 속도가 매크로에비해 느림
13.미리 정의된 매크로
- 미리 정의된 매크로(predefined macro)는 프로그래머를 위하여 컴파일러가 미리 제공하는 매크로이다
가정의 매크로 | 기능 |
__DATE__ | Mmm dd yyyy 형태로 전처리기 실행(컴파일) 날짜 |
__FILE__ | 소스 파일의 이름 |
__LINE__ | 행 번호 |
__TIMESTAMP__ | 전처리기가 실행된(컴파일한) 날짜와 시간 |
__TIME__ | 전처리기가 실행된(컴파일한)시간 |
14.조건부 컴파일
- 해당 매크로가 미리 정의되어 있으면 나열된 문장을 컴파일하라
#ifdef 매크로명
문장
#endif
사용 예시
#endif
#ifdef __cplusplus
extern "C" {
#enfid
:
#ifdef __cplusplus
}
#endif
__cplusplsu 매크로가 정의되어있으면 extern "C"{를 컴파일하라
즉,C언어 스타일로 컴파일 하라는것
15.자동 형 변환
const와 자동 형 변환
자료형 앞에 const를 추가하면 초기값에서 변경할 수 없는 상수화 변수를 만들 수 있다.
자료형이 서로 다른 혼합연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산이 이루어지는데 이것을 자동 형 변환 이라고 한다.
16. 식별자 (카멜케이스)
- 변수 명
- 변사, 소문자
- student, my_age
- 매크로명
- 명사 모두 대문자, _
- #define MAX_STUDENT
- const 상수명
- 명사 첫 글자와 의미가 바뀌는 부분은 대문자 나머지는 소문자
- const int DaysInWeek=7;
- 구조체, 열거형 명
- 명사, 첫 글자와 의미가 바뀌는 부분은 대문자
- 함수 명
- 동사, 첫 글자와 의미가 바뀌는 부분은 대문자, 나머지는 소문자
- AddNumber(), DeleteName()