농담곰담곰이의곰담농

C 프로그래밍 : 현대적 접근 02 | C 기초

by 브이담곰

1 간단한 프로그램 짜기

[프로그래밍] 어록 프로그래밍하기
#include<stdio.h>

int main(void)
{
	printf("To C, or not to C:that is the question.\n")'
    
    return 0;
}

 

#include<stdio.h>

C의 표준 입출력 라이브러리에 대한 정보를 include 하기 위해 필요한 줄

int main(void)

프로그램에서 사실상 실행되는 코드는 main에 존재한다. 대표 main 프로그램을 의미

printf("To C, or not to C:that is the question.\n")'
표준 입출력 라이브러리에 내장된 함수로, 데이터를 깔끔하게 출력해줌.   

 

return 0;

프로그램이 종료될 때 운영체제에 0이라는 값을 넘긴다.

 

컴파일과 링크

1️⃣ 전처리(Preprocessing) 

# 으로 시작하는 지시어 directive로 알려진 줄들의 지시를 먼저 따른다.

2️⃣ 컴파일(Compiling)

컴파일된 프로그램은 컴파일러로 보내진다. 컴파일러에서 기계어 명령문(목적코드 object code)으로 번역이 된다.

3️⃣ 링킹(Linking)

linker가 컴파일에 의해 생성된 목적 코드를 추가적인 코드(라이브러리 내부의 명령문을 의미)와 합친다.

 

GCC 컴파일러

가장 유명한 C 컴파일러 중 하나. 리눅스에서 제공되는 컴파일러. UNIX의 cc 컴파일러를 사용하는 것과 비슷하다.

 

2 간단한 프로그램의 일반적인 구조

*directives*

int main(void)
{
*statesment*
}

C는 다음 세 가지 부분에 의존한다. 

지시자(directives) → 어떤 프로그램을 컴파일하기 전에 그 프로그램을 수정하는 명령문을 수정하는 것.

함수(function) 이름이 있는 블록 형태로 이루어진 실행 가능한 코드

구문(statement) → 프로그램이 실행될 때 실행되어야 할 명령문들.

 

지시자

전처리기들을 위한 명령문들을 뜻함. C는 다른 언어들과 달리 읽거나 쓸 수 있는 기본 내장 함수가 없기 때문에 라이브러리를 불러와야 한다. 

지시자는 언제나 #으로 시작해야한다.

 

함수

집합화된 여러개의 구문을 의미.

✨ main함수는 프로그램이 실행될 때 자동으로 실행되는 함수이기 때문에 특별한 함수이다!

main 함수는 프로그램이 종료될 때 운영체제에서 상태 코드 status code를 반환한다.

 

구문

C에서는 각 구문을 반드시 세미콜론(;)으로 끝나야 한다. 세미콜론은 컴파일러가 구문이 어디서 끝나는지 알려주는 역할을 한다.

 

문자열 출력하기

printf 함수는 " " (큰 따옴표)를 무시하고 안에 있는 정보만 출력한다.

printf 함수는 다음 줄로 넘어가라고 지시하지않는 한, 다음줄로 마음대로 넘어가지 않는다.

따라서 개행문자 \n 을 추가해서 다음 줄로 넘어갈 수 있도록 한다.

 

3 주석

/*이것은 주석입니다*/

 

[C99]를 사용하는 경우 // 를 앞에 적어 주석 처리를 해줄 수 있다.

// 이것은 주석입니다

 

4 변수와 할당

int(integer) 0,1,392,-2355 등의 정수를 저장할 수 있다.

float( floating-point 부동 소수점 ) int 변수보다 더 큰 수를 저장할 수 있고, int를 이용한 연산보다 더욱 느릴 수 있다.

선언

변수들은 반드시 선언 declare되어야 사용될 수 있다.

변수를 선언하기 위해서는 변수의 형을 선언 해준 뒤, 그 변수의 이름을 선언해주면 된다.

int height;
float profit;

 

할당

변수는 할당 assignment를 함으로써 값을 가질 수 있다.

여기서 할당하는 숫자들은 상수constant라고 부른다. 변수에 값을 할당하거나, 변수를 사용하기 전엔 먼저 선언이 되어야한다.

int height;
height = 8;

 

변수의 값 출력하기
printf("Height: %d Length: %d\n", height, length);

 

초기화

선언과 초기값 할당을 동시에 해줄 수 있다.

int height = 8;

 

표현식 출력하기
volume = height * length * width;
printf("%d\n", volume);

이 예제는 아래와 같이 표현할 수 있다.

printf("%d\n",  height * length * width);

 

 

5 입력값 읽기

💡scanf와 printf에 사용되는 f는 형식화 formatted의 약자이다.

scanf와 printf는 각각 데이터를 입력받거나 출력할 때 형식 문자열(format string)이 필요하다.

scanf("%d", &i); /*정수를 받아 i에 저장한다. */
scanf("%d", &i); /*reads an integer; stores int i*/

☆ scanf가 정수값을 받기 위해선 문자열 %d 가 필요하다.

 

 

6 상수 이름 정의하기

프로그램에 상수를 포함하고 있다면, 상수에 이름을 지어주는 것이 좋다. macro definition(매크로 정의)

#define INCHES_PER_POUND (166)

 

weight = (volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND;

 

+ 추가

매크로의 값은 표현식이 될 수 있다.

#define RECIPROCAL_OF_PI (1.0f / 3.14159f)

만약 표현식에 연산자가 존재한다면 괄호를 통해 열고 닫아줘야한다.

 

7 식별자

프로그램을 작성하면서 변수, 함수, 매크로 등에 지어주는 이름을 식별자라고 한다.

✨ C에서는 식별자를 정의할 때 문자, 숫자나 _와 같은 밑줄 표시를 사용할 수 있다. 단 ,이름은 숫자로 시작할 수 없다.

C는 대소문자를 구분하기 때문에 많은 프로그래머들은 매크로를 제외하고는 식별자를 오로지 소문자로 작성하고, 가독성을 위해 밑줄 표시를 사용하기도 한다.

 

키워드

[C99] C 컴파일러에선 아래에 있는 일부 keyword를 특별인식하기 때문에 이들을 식별자로 사용할 수 없다!

 

8 C 프로그램의 레이아웃

C 프로그램을 일종의 토큰(token)의 연속이라고 이해할 수 있다.

토큰 : 의미를 구성하는 최소 단위 ( 식별자, 키워드, 연산자, 쉼표, 세미콜론 , 등등)

printf( "Height: %d\n", height );

위 구문은 7개의 토큰으로 이루어져있다.

printf 와 , 는 식별자

"Height: %d\n" 는 스트링 리터럴

나머지는 전부 구두점이다.

 

요약 : 대충 가독성있게 줄바꿈과 띄어쓰기를 잘 활용해서 작성하자!

 

Q&A
GCC의 약자는 뭔가요?

GNU Compiler Collection의 약자. GCC는 C 뿐만 아니라 Ada,C, C++. Fortan, Java와 Objective-C와 같은 다양한언어를 컴파일하기 떄문.

 

GNU는?

GNU's Not Unix!

블로그의 정보

농담곰담곰이의곰담농

브이담곰

활동하기