C언어 3주차
https://www.yes24.com/Product/Goods/117931721
출처
Smile Han의 C언어 프로그래밍 - 예스24
Smile Han의 C언어 프로그래밍
www.yes24.com
stdio 와 main
printf("asd");
c에서 이렇게 한줄만 쓰면 작동이 안된다
파이썬은 가능한데 자바랑 c는 안된다..
error C2440: '초기화 중': 'const char [4]'에서 'int'(으)로 변환할 수 없습니다.
F4로 디버깅을 하면 위의 문구가 출력 되는걸 볼수있다
int main() {
printf("asd");
}
이제 int 메인을 시작해 안에 프린트 문구를 넣으면
error C3861: 'printf': 식별자를 찾을 수 없습니다.
error C2059: 구문 오류: ';'
error C2059: 구문 오류: '}'
error C2143: 구문 오류: ';'이(가) '}' 앞에 없습니다.
이렇게 오류가 나온다.
#include<stdio.h>
int main() {
printf("asd");
}
맨 윗줄에 #include 포함한다 <stdio.h> std는 스탠다드 io는 입출력
을 넣어주면 정상 작동한다
#include<stdio.h>
int main() {
return 0;
}
이게 C언어의 기본 틀이 되는데
C 언어 표준에서 main 함수의 반환 타입을 명확하게 int로 규정하고 있기 때문에 이렇게 써야하며
운영체제는 프로그램이 종료될 때 정수 값(종료 코드)을 기대하고
이 값으로 프로그램의 실행 성공 여부를 판단합니다.
보통 0은 성공, 0이 아닌 값은 오류를 의미함
메인함수는 중요하지만 모든 함수에 딱 한번만 존재해야한다
c언어의 시작점이기때문이다.
정리하면 c언어는 메인에서 시작하니까 꼭 main이 있어야하며 한개만 있어야한다
예약어(reserved word, keyword)
- 컴파일러에 의해 미리 의미가 정해져 있는 32~44 개의 단어
- 항상 소문자로만 사용(C99 이전)
- C99에서 추가된 예약어
ex) inline, restrict, _Bool, _Complex, _Imaginary
c언어는 대문자와 소문자를 구분한다
항상 유의해서 사용해야한다.
토큰(token) 과 구두점
- 토큰
- C프로그램을 구성하는 기본 단위
- 예약어(reserved word, keyword):int, if등 44개
- 연산자(operator) : + . / 등 40개
- 구두점(punctuator) : 변수, 함수, 배열, 구조체 등의 이름
- 리터럴(literal) or 상수 (constant) : 10, 3.5
- 문자열(string) : "hello word"
- 구두점
- 토큰을 구분하기 위해 사용하는 기호로 50여 개가 있는데 40여 개는 연산자로 사용
- [], {}, (), *, = .......
C언어 구두점 및 기호 표
구두점 명칭 용도 예
[ ] | bracket, 대괄호 | 배열크기 지정 | char ch[10]; |
{ } | brace, 중괄호 | 블록(제어문, 함수)<br>구조체, 틀<br>배열 초기화 | if(x>y) { }<br>int num[3]={1, 2, 3}<br>struct SCORE { }; |
( ) | parenthesis, 소괄호 | 제어문의 조건식<br>함수의 매개변수 목록 | if(x>y)<br>printf("AAA"); |
* | asterisk, 별표 | 포인터 변수 선언 | char *name; |
, | comma, 쉼표 | 변수, 함수 선언<br>함수의 매개변수 나열<br>배열 초기화 | int x,y;<br>sum(x,y);<br>int num[3]={1, 2, 3} |
; | semicolon, 세미콜론 | 문장의 끝 for문의 구성 구분 | int num;<br>for(i=0;i<10;i++) |
= | equal sign | 변수, 배열 초기화 | int num[3]={1, 2, 3} |
: | colon, 콜론 | goto문에서 분기하는 레이블<br>case문의 레이블 다음 | AAA:<br>case 0 : |
... | ellipsis, 생략부호 | 함수원형에서 매개변수 생략 | int printf( const char *format [, argument]... ); |
# | sharp, 샵 | 전처리기 | #include<br>#define |
주석문(comment)
- 프로그램 중에 설명문을 작성 할 때 사용하는 문장
- 프로그램의 수행과 무관하게 프로그램의 목적, 수행과정, 알고리즘에 대한 설명
- 자신이나 다른 프로그래머에게 프로그램의 이해를 돕기 위한 설명문
- 컴파일러는 무시하는 부분
- "/*"로 시작하고 "*/"로 종료하며 사이에 있는것들은 주석처리 된다.
#include<stdio.h> //std io 스탠다드 아아오
int main() { // 메인함수 시작부분이며 int
printf("aaaaaaa"); // 프린트문
return 0; // 리턴값은 0 c99이후로는 생략해도 되지만 관례상 쓰자
}
여러줄 주석 하는 방법
컨트롤 + /
또는
컨트롤 + k + c
편한건 컨트롤 + / 가 편하다.
printf() 함수 사용법
#include<stdio.h>
int main() {
printf("c언어\n ");
printf("\\""사용");
return 0;
}
\n 은 엔터라고 생각하면된다
다음 프린트문이 다음 줄에 출력됨
여러번 사용해도 문제가 생기지 않는다.
C언어 백슬래시(\ 이스케이프 시퀀스) 관련 표현 표
- 이스케이프 시퀀스(escape sequence)는 탈출 문자 또는확장 문자열 이라고도 함
- 역슬래시 \ 와 영문자나 특수문자로 이루어진 문자 조합
\\ | 백슬래시 | 문자열 내에서 백슬래시 자체를 표현 | printf("C:\\Program Files\\"); |
\n | 줄바꿈 | 새 줄로 이동 | printf("Hello\nWorld"); |
\t | 탭 | 수평 탭 삽입 | printf("Name:\tKim"); |
\r | 캐리지 리턴 | 커서를 현재 줄의 맨 앞으로 이동 | printf("Hello\rWorld"); |
\" | 큰따옴표 | 문자열 내에서 큰따옴표 표현 | printf("그가 \"안녕\"이라고 말했다"); |
\' | 작은따옴표 | 문자열 내에서 작은따옴표 표현 | printf("It\'s my car"); 또는 char c = '\''; |
\? | 물음표 | 문자열 내에서 물음표 표현 | printf("Hello\?"); |
\a | 경고음 | 시스템 경고음 발생 | printf("\a"); |
\b | 백스페이스 | 커서를 한 칸 뒤로 이동 | printf("Hello\b"); |
\f | 폼 피드 | 페이지 넘김 | printf("Page 1\fPage 2"); |
\v | 수직 탭 | 수직 탭 삽입 | printf("Line1\vLine2"); |
\0 | Null 문자 | 문자열의 끝을 나타냄 | char str[] = {'H', 'i', '\0'}; |
\xhh | 16진수 | 16진수 값(hh)에 해당하는 문자 | printf("\x41"); // 'A' 출력 |
\nnn | 8진수 | 8진수 값(nnn)에 해당하는 문자 | printf("\101"); // 'A' 출력 |
\\\\ | 매크로 줄바꿈 | 전처리기에서 긴 매크로를 여러 줄로 나눌 때 사용 | #define LONG_MACRO This is a very \\\n long macro |
문제(리포트)
문제 1번
문제 3번
- 매개변수: 함수에 값을 전달하는 변수이다 함수를 호출할 때 값을 넘겨줄 수 있도록 정의되는데 예를 들어, add(int a, int b)에서 a와 b는 매개변수이다
- 반환값(리턴값): 함수가 처리한 결과를 반환하는 값이다 함수에서 어떤 작업을 하고 나서 그 결과를 돌려줄 때 사용됩니다. 예를 들어, int add(int a, int b) { return a + b; }에서 a + b가 반환값입니다.
문제 4번
기본적인 틀은 3가지가 있다
1. 헤더 #include<stdio.h>
2. main 함수
3. 기타 함수들
#include<stdio.h> // 입출력 관련 함수 사용을 위한 헤더 파일
int main(void){
printf("hello world) //프로그램 실행코드
return 0; // 프로그램 종료 코드
}
문제 5번
// <- 여기부터 주석
/* 사이에 주석 */
#include <stdio.h>
int add(int a, int b) { // a, b는 매개변수
return a + b; // a + b가 반환값
}
int main() {
int result = add(3, 5); // 3과 5를 매개변수로 전달
printf("결과: %d\n", result); // add 함수의 반환값을 출력
return 0;
}
전달인자(argument)와 매개변수(parameter)
- parameter (매개변수): 함수가 정의될 때 함수에 전달받을 값을 받을 변수
- argument (인수): 함수를 호출할 때 실제로 전달하는 값
- 함수 정의에서 int add(int a, int b)에서 a와 b는 parameter입니다.
- 함수 호출에서 add(3, 5)에서 3과 5는 argument입니다.
#include <stdio.h>
// 함수 정의, 매개변수 a와 b
int add(int a, int b) {
return a + b; // 매개변수 a와 b를 더한 값을 반환
}
int main() {
int result = add(3, 5); // 함수 호출, 3과 5가 인수 (arguments)
printf("결과: %d\n", result); // 결과 출력
return 0;
}
쉽게 설명하자면
#include<stdio.h>
int main1(int a) { // <- main1(int a) 는 파라미터다
printf("%d", a);
return 0;
}
int main(void) {
printf("asd");
main1(10); // <- 여기서 main1을 호출하며 값을 10을 넣어준다(전달) 이게 아규먼트다
return 0;
}
정리
전형적인 C 프로그램
C 프로그램의 기본 툴
- ANSI C에서 권장하고 있는 표준 틀과 C99 이후 스타일
int main(void){ 코드 작성 return 0; } |
int main(void){ 코드 작성 } |
- 예약어와 토큰
- 토큰은 c프로그램을 구성하는 기본 단위
- 예약어, 연산자, 구두점, 식별자 , 상수 , 문자열