💻Computer Science/📕개발 언어 (Language)

[C][Ch.2] C언어 기초

Written by Donghak Park

C언어 기초

C 프로그램의 구조

C언어는 주로 아래와 같은 구조를 가진다.

#include 문

#define 문

int func(int a)
{
    // 함수
    return 1;
}

int main(void)
{
    // statement

    return 0;
}

간단한 예제를 들자면 아래와 같다.

#include <stdio.h>

#define TEXT "This is Simple Example"

int main()
{
    printf(TEXT)l
    return 0;
}

C 프로그램의 특징

C언어는 다음과 같은 특징을 가지고 있습니다.

  • C 프로그램의 기본 단위는 함수이다.
  • 함수 내의 각 명령문은 세미콜론(;)--> 구분자로 끝나야 한다.
  • C 언어는 대소문자를 구분하여 사용해야 한다.
  • 형식을 지키면 자유롭게 프로그래밍 가능하다. ( Python은 인테트를 철저하게 지켜야함)

주석 처리

개발을 진행함에 있어 주석은 협업에 있어서 굉장히 중요하다. 따라서 C언어에서의 주석 방법에 대해서 알아보자

// 한줄 주석은 다음과 같이 처리한다.
/*
여러줄
주석은
다음과 같이
처리한다.
*/

주석은 코드의 설명 뿐아니라 함수의 기능 설명, 작성자, 라이센스등을 표시할 때 유용하게 사용할 수 있다.

C언어 표준 입출력 함수

프로그램에 입력과 출력을 다루는 것은 입출력 함수를 통해서 이루어진다. 여기서 말하는 입출력은 사용자와 프로그램사이의 인터렉티브를 위한 것이다. 대표적인 함수로는 printf(), scanf() 함수가 있다.

printf() 함수는 다음과 같이 사용할 수 있다.

#include <stdio.h>

int main()
{
    printf("Hello world"); //줄바꿈 없는 출력 함수

    printf("Heelo world\n"); //줄 바꿈 있는 출력 함수

    int num1 = 15;
    printf("%d", num1); //숫자 출력

    char chr1 = "a";
    printf("%s", chr1); //문자열 출력 --> 문자하나 뿐 아니라 문자열도 출력 가능
}

위와 같이 %s, %d는 서식 지정자라고 지칭하는데 이를 통해서 데이터 서식을 지정하여 출력할 수 있습니다. (아래는 자주 사용되는 서식 지정자입니다. 더 자세한 내용은 참고 문헌을 참고해주세요.)

  • %c : 하나의 문자
  • %s : 문자열
  • %d : 부호가 있는 10진 정수
  • %f : 고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현)

다음으로는 scanf() 함수에 대해서 알아보겠습니다. 한가지 주의할 점은 요즘은 보안 문제로 인해서 scanf() 보다는 scanf_s()함수를 주로 사용합니다. 이는 스택오버플로우를 방지하기 위함입니다.

#include <stdio.h>

int main(void)
{
    int num1, num2;

    scanf("%d %d", &num1, &num2);

    printf("%d %d", num1, num2);
    return 0;
}

변수란 ?

변수(Variable)이란 데이터를 저장히기 위한 메모리 공간을 뜻합니다. C언어에서는 다양한 자료형의 변수가 존재합니다.

이러한 변수를 선언할 때는 이름을 통해서 생성하게 되는데 이런 이름을 정하는데 규칙은 다음과 같습니다.

  • 변수의 이름은 영문자, 숫자, _로만 구성
  • 이름을 숫자로 시작할 수 없음
  • 이름 사이에 공백은 존재 할 수 없음
  • 미리 정의된 키워드는 사용 불가능

예시는 아래와 같습니다.

#include <stdio.h>

int main(void)
{
    int num1;
    int num2 = 10;
    float num3;
    float num4 = 1.33;
    double num5;
    double num6 = 1.3324234234;

    return 0;
}

상수(Constant)란 ?

상수란 변수와 마찬가리조 데이터를 저장할 수 있는 메모리 공간이다. 하지만 변수와의 차이점은 변경할 수 없다는 것에 있다.

이러한 상수에는 리터럴 상수와 심볼릭 상수가 있다. 리터럴 상수는 말 그대로의 상수를 의미한다. "a", "3" 등과 같이 그 자체로 상수인 것을 말한다. 심볼릭 상수는 이름을 가진 상수로 선언과 동시에 초기화를 해야한다. 이러한 심볼릭 상수는 const나 #define을 통해서 정의할 수 있다.

기본 타입

C언어에서는 data의 타입을 통해서 얼마나 메모리를 차지할 지 결정할 수 있고 기본적으로 C언어에서 제공하는 타입들이 있는데 다음이 그 목록이다.

  • short : 2바이트 정수
  • unsigned short : 2바이트 정수
  • int : 4바이트 정수
  • unsigned int : 4바이트 정수
  • long : 4바이트 정수
  • unsigned long : 4바이트 정수
  • float : 4바이트 실수
  • double : 8바이트 실수
  • long double : 8바이트 실수
  • char : 1바이트 문자형
  • unsigned char : 2바이트 문자형

타입 변환 (Type Conversion)

C언어에서의 연산은 같은 타입끼리만 진행된다. 그를 위해서 타입의 변환이 필요하다 이때 작은 단위(ex 정수) 에서 큰 단위(ex. 실수)로 가는 것은 정보의 손실이 없지만 반대의 경우 정보의 손실이 있다. 이러한 타입 변환에는 "묵시적 타입 변환)"과 "명시적 타입 변환"이 있다.

  • 묵시적 타입 변환 (자동 타입 변환)
    • 묵시적 타입 변환은 대입 연산이나 산술 연산에서 컴파일러가 자동으로 실행해준다. 아래의 순서대로 변환
    • char -> short -> int -> long -> float -> double -> long double
  • 명시적 타입 변환 (강제 타입 변환)
    • 명시적 타입 변환은 사용자가 타입 캐스트 연산자를 통해서 강제적으로 수동적으로 수행하는 타입 변환 작업이다.
  int num1 = 1;
  int num2 = 4;

  double result1 = num1/num2;
  double result2 = (double)num1/num2;

  // result1 --> 0.000000
  // result2 --> 0.250000

Reference

http://www.tcpschool.com/c/intro