본문 바로가기
Language & Framework & GIT/C

[씨앤씨뿔]C/ C 구성 요소

by veganwithbacon 2023. 3. 23.
반응형

노트북이 정리한 내용을 다 날려먹었다 ㄴ이러ㅣㅁㄴㅇ러ㅣㄴㅁ어리ㅏㄴㅁ리

임시저장 필수다 정말 


주석(comment) : 프로그램에 대한 설명

C에서 이용가능한 주석 지정 방법 

/* 과 */을 이용한 여러 줄 주석

//을 이용한 한 줄 주석

 

주석이 코드에 영향을 미치지는 않기에 작성하지 않아도 되나 가독성이 좋은 코드, 즉 알아보기 쉬운 코드가 좋은 코드라는 것을 다들 알고 있지 않던가.


1) 함수

C 프로그램을 이루는 기본 단위는 문장(statement)이다.

각 문장은 세미콜론(;)으로 끝난다.

 

함수를 만들 때는 리턴형, 함수명, 매개변수가 필요하다.

tcp school의 사진을 퍼옴

함수가 처리할 내용, 즉 문장들은 { 과 } 안에 써준다.

 

2) 진입점 함수

main함수는 C프로그램이 처음 시작될 때 호출되는 함수로 진입점(entry-point) 함수라고 한다.

C프로그램에는 main함수가 반드시 필요하다. main 함수는 Main이나 MAIN은 잘못된 사용이다.

 

일반적으로 리턴 값이 있는 함수는 반드시 return문을 가져야 하나, main함수에 한해서 return문을 생략할 수 있다.

프로그램의 종료 코드가 0이면, 정상 종료를 의미하며 종료 코드가 1이라면 비정상 종료를 의미한다.

 

3) 들여 쓰기

C 코드에서는 세미콜론(;)이 문장의 끝을 의미한다.

일반적으로 가독성을 위해 한 줄에 한 문장씩 작성한다.

{ }로 묶인 문장들을 블록(block)이라고 한다.

 


출력

 

입출력 라이브러리에서 키보드 입력을 표준 입력, 콘솔로의 텍스트 출력을 표준 출력이라고 한다.

 

입출력 라이브러리가 제공하는 표준 입출력 함수를 사용하기 위해서는 <stdio.h>를 사용해야 한다.

라이브러리의 함수명, 리턴형, 매개변수의 정보를 지닌 것이 헤더 파일(.h)이다. 

 

C 프로그램에서 콘솔에 텍스트 출력을 위해서는 printf 함수를 이용해야 한다.

문자열 출력 후에 커서를 다음 줄로 이동하기 위해서는 다음과 같이

문자열 내에 줄 바꿈 문자('\n')를 함께 출력해야 한다.

ex) printf("스벅 왤케 추워요 \n"); //출력하고 커서를 다음 줄로 이동


변수

변수 :  어떤 값을 저장하기 위한 공간

변수를 사용하기 위해서는 변수명과 데이터형(data type)이 필요하다.

 

변수는 선언(declaration) 후 사용해야 한다.

 

데이터형 변수명 ;

ex) int num;  //정수형 변수 선언

      float x;    //실수형 변수 선언

      char ch;  //문자형 변수 선언

 

C언어에서는 반드시 변수의 첫 글자에는 영문자나 밑줄 기호가 와야 하며,

변수명 중간에는 빈칸이나 다른 기호를 사용해서는 안된다.

-------------------------------------------------------------------------------------------------------------------------

변수에 값을 저장하는 것을 보통 변수에 값을 대입한다 라고 표현한다.

 

ex)

num = 10;

x = 12.34;

ch = 'X';

 

변수 값을 읽어 올 때도 변수명을 사용한다.

printf("%d", num);

x =  num + 0.1;


printf함수

주어진 값을 형식에 맞춰 출력하는 기능을 제공

 

printf 함수 형식 문자열

서식 지정자 의미 사용 예시 실행 결과
%d 정수를 10진수로 출력 int num = 123;
printf("%d", num);
123
%x 정수를 16진수로 출력
(0~9, a~f 사용)
int num = 123;
printf("%x", num);
7b
%X 정수를 16진수로 출력
(0~9, A~F 사용)
int num = 123;
printf("%X", num);
7B
%f, %F 실수를 부동소수점 표기 방식으로 출력 float x = 1.23;
printf("%f", x);
1.230000
%e, %E 실수를 지수 표기 방식으로 출력 float x = 1.23;
printf("%e", x);
1.230000e+00
%c 문자 출력 char ch = 'A';
printf("%c", ch);
A
%s 문자열 출력 char name[20] = "abc";
printf("%s", name);
abc

 

문자 폭 지정

%8d 라고 예시를 들면 %8d는 8칸에 맞춰 오른쪽부터 출력

12345를 출력한다고 하면 앞에 3자리를 남기고 12345가 출력된다.

이에 반해 %08d를 통해 12345를 출력하게 되면 앞에 공백이 아닌 00012345가 출력되는 것이다.

 

정밀도 지정

printf 함수는 실수를 출력할 때 디폴트로 소수점 이하 6자리를 출력한다.

ex) 12.345678를 기준으로 보자.

%f를 통해 출력 시 12.345678이 출력

%.2f를 통해 출력 시 12.35가 출력된다. 소수점 이하 2자리만 출력하되 반올림 출력된다.

%8.2를 통해 출력 시 전체 8 문자 폭에 소수점 이하 2자리 출력이 되는 것이다. 12.35이나 다르게 출력된다.


scanf함수

scanf함수는 콘솔에서 키보드로 입력한 값을 읽어온다.

변수명 앞에는 &을 지정하는데, 변수명 앞에 &을 지정하면 '~에'라는 의미를 담는다.

 

scanf함수의 형식 문자열

서식 지정자 의미 사용 예시
%d 정수를 10진수로 입력 int num;
scanf("%d", &num);
%x 정수를 16진수로 입력 int num;
scanf("%x", &num);
%i 정수를 10진수, 8진수, 16진수로 입력
(012는 8진수, 0x12는 16진수)
int num;
scanf("%i", &num);
%f float형 실수 입력 float x;
scanf("%f", &x);
%lf double형 실수 입력 double y;
scanf("%lf", &y);
%c 문자 입력 char ch;
scanf("%c", &ch);
%s  문자열 입력 char name;
scanf("%s", name);

scanf를 사용하다 보면 종종 컴파일 경고나 링크 에러가 발생한다.

scanf는 버퍼 오버플로우 문제가 발생할 위험이 큰데, 이 때문에 나온 것이 scanf_s이다.

scanf_s를 사용하면 오버플로우가 발생하게 되면 외부에 데이터를 저장하지 않는다.

 

버퍼 오버플로우의 의미는

"프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것을 의미한다"

 

알빠노라고 생각할 수도 있지만..

scanf_s의 사용은 데이터 오염이나 악의적 프로그래머 등으로 인한 피해를 방지할 수 있다.

 

scanf_s의 경우, 보안적으로는 문제해결이 되나 Visual Stdio에서만 지원이 되므로 호환성면에서 문제를 야기한다.

그렇기에 #define _CRT_SECURE_NO_WARNINGS를 통해 경고를 뜨지 않게 할 수 있다.

종종 CRT_SECURE_NO_WARNINGS를 사용하면 자동으로 scanf_s 처리를 해준다고 하는데 이는 잘못된 정보이다.

 

 

scanf 함수에서는 문자 배열에 입력 시에는 &를 지정하지 않는다.

scanf 함수의 형식 문자열 안에 %로 시작하는 서식 지정자를 여러 개 사용 시에는, 서식 지정자와 입력받을 변수의 개수가 같기만 하면 된다.

ex) scanf("%s %d %c", name, &age, &gender);

공백문자

더보기

공백 문자의 역할은 입력 시 입력되는 항목들을 구분하는 역할을 하므로 빈칸을 통한 공백이나 탭 문자(\t)를 통한 공백 문자를 무시 어떤 것이든 사용가능하다.

ex)scanf("%s %d %c", name, &age, &gender); 

     scanf("%s\t%d\t%c", name, &age, &gender);

마지막으로 데이터형을 잘못 사용할 경우 컴파일 에러가 발생할 수 있으므로 주의하자.

printf 함수를 통해 실수 값을 출력할 때는 float이나 double에 상관없이 %f와 %lf 둘 다 사용 가능하다.

반응형

'Language & Framework & GIT > C' 카테고리의 다른 글

[씨앤씨뿔] C/ 함수  (0) 2023.04.04
[씨앤씨뿔] C/ 제어문  (0) 2023.03.28
[씨앤씨뿔] C/ 연산자  (0) 2023.03.27
[씨앤씨뿔]C/ 데이터형&연산자  (0) 2023.03.25
[씨앤시뿔] C/ C?  (2) 2023.03.23

댓글