본격적으로 프로그래밍을 시작하기전에, 아무래도 회사와 집에서 강좌 포스팅을 작성하기 때문에 라이센스 문제로 포스팅글마다 Visual Studio의 버전이 다를 수 있습니다! 대부분의 코드는 상관이 없지만 버전마다 소스가 달라질 수 있기때문에 버전별로 소스가 다른 부분에 대해서는 별도로 코드를 올려드리겠습니다.


툴은 Visual Studio로 개발할 예정이며, Visual Studio 2010, Visual Studio 2017 버전 기준으로 포스팅 하겠습니다.

시작해볼까요?

1. 첫번째 프로젝트를 생성해보자.

 

우선 Visual Studio를 실행시켜줍니다.

좌측 상단의 메뉴에서 [파일][새로만들기] [프로젝트] 를 눌러봅시다.



그러면 이런창이 뜰테죠!

왼쪽 상단의 Visual C++을 선택하시고,

중앙 상단의 Win32 콘솔 응용 프로그램 선택 후 하단의 이름은 프로젝트 이름이니 아주 친숙한 HelloWorld 라고 입력한 뒤, 확인버튼을 눌러주세요.



Win32 응용 프로그램 마법사가 실행됩니다. 다음 버튼을 눌러 진행해봅시다.




콘솔 응용 프로그램 선택후 추가 옵션에 빈 프로젝트를 체크하신 뒤, 마침 버튼을 눌러줍시다.



마침 버튼 클릭후 잠시 기다리면 위와 같은 화면이 나타납니다. 좌측 상단을 보시면 솔루션 탐색기라는 창이 나타나는데, 여기서 우리가 작성하는 코드를 관리할 것입니다.


우리가 코딩할 프로젝트가 완성되었군요! 이제 프로그래밍을 직접해볼 C 파일을 생성해보죠.


2. C파일을 만들어보자.

 

자 이제 직접 C파일을 만들고 코딩을 해보죠.

솔루션 탐색기의 소스파일 선택 후 우클릭 후, [추가] [새항목]을 클릭해줍시다.


새 항목 추가창이 나오면 좌측 상단 Visual C++ 선택, 중앙 상단의 C++파일 (.cpp)을 선택합니다.

여기서 우리는 C언어를 배우는데 왜 C++파일을 선택하나요? 라고 생각하실 수 있습니다.

C++은 C문법에 OOP 개념과 일반화 프로그래밍을 위한 템플릿(STL 지원) 기능이 추가된 언어입니다.

한마디로 C확장판이라고 생각하시면 편할겁니다.

아무튼 말이 길어졌는데, 중요한 것은 우리는 C언어 프로그래밍을 하는게 목적이죠!

그렇기에 이름에 main.c 라고 작성하여야 C언어로 동작합니다. 확장자가 [.cpp] 이면 C++언어로 동작하니 주의하세요!

이름까지 작성하셨다면 추가버튼을 눌러 C언어 파일을 만들어줍시다.


자 이제 에디터 화면이 생겼습니다. 왼쪽 솔루션 탐색기에서 우리가 만든 main.c 파일이 파일 목록에 나타납니다. 이제 에디터 화면에 코드를 작성해봅시다.


3. 첫번째 코딩을 해보자.

 

자 이제 직접 C파일을 만들고 코딩을 해보죠.

아래 내용을 에디터 화면에 작성해봅시다. 코딩은 복붙하면서 작성하면 실력이 늘지 않으니 가급적 직접 작성해 보시는 것을 추천합니다.

#include <stdio.h>


void main(){


printf("Hello World\n");


}

위 내용을 타이핑 하였다면 프로그램을 실행시켜봐야겠죠?

상단 메뉴에서 [디버그] [디버깅하지 않고 시작] 을 눌러 실행해봅시다.

단축키로는 Ctrl + F5를 눌러 실행시켜 봅시다.



블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,

전처리문이란?

 

컴파일 이전에 미리 처리되는 문장을 말합니다또한 선행처리기라고도 말합니다. 여기서 컴파일러는 여러분들이 작성하신 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 코드들을 우선적으로 수행합니다.

전처리문들의 종류로는 #include, #if, #define, #ifdef, #defined, #ifndef, #undef 등이 있습니다. 기존에 작성한 소스 코드들을 건드리지 않고, 부분적인 컴파일을 수행합니다.

 

 

C, C++의 전처리문이 시작하는 Line의 첫 글자는 ‘#’으로 시작합니다.

ANSI 표준에 따른 C의 전처리문의 종류는 아래와 같습니다.

파일 처리 : #include

형태 정의 : #define, #undef

조건 처리 : #if, #ifdef, #ifndef, #else, #elif, #endif

에러 처리 : #error

디버깅 : #line

컴파일 옵션 처리 : #pragma

 

조건 처리를 위한 전처리문은 조건에 대한 검사를 수행하며, 그 결과를 True, False로 반환합니다.

#if : …이 참이라면

#ifdef : …이 정의되어 있다면

#else : #if #ifdef에 대응.

#elif : else + if”의 의미

#endif : #if, #ifdef, #infdef 이 끝났음을 알림.

 


#include

헤더 파일(외부파일)을 읽어서 함수를 포함시키고자 할 때 사용됩니다. 

이때 외부파일은 C의 소스파일과 같은 형태의 일반 문서파일을 말합니다.


1

2

#include <stdio.h>    // 이 소스(위치)에 stdio.h의 파일의 내용을 포함시킨다. 

#include "text.h"       // 이 소스(위치)에 text.h라는 파일의 내용을 포함시킨다. 

cs


#include<> 를 사용할 때는 컴파일러의 라이브러리 폴더를 참조할 때 '<>'를 사용합니다.

#include"" 를 사용할 때는 현재 디렉토리에서 헤더파일을 참조할 때, 주로 사용자가 생성한 헤더파일을 참조할때 ' "" '를 사용합니다.


#define

상수값을 지정하기 위한 예약어. 전처리기 지시자라고 하며, #define으로 선언하면 구문을 상수로 변환합니다.
또한 #define은 상수선언과 더불어 함수로도 사용이 가능합니다.


1

2

#define PI 3.14

#define SUM (x,y) { x + y }

cs


위와 같이 #define 까지의 구문을 전처리기 지시자 라고 하며, PI는 상수라고 칭합니다.


1

2

3

#define PI 3.14

 

double PI = 3.14;

cs


위와 같이 두 코드가 있다고 가정하면 결과는 비슷해 보이지만 엄밀히 말하면 다릅니다.

#define 구문은 '단순한 치환' 입니다. 예를들어 가정해봅시다.

예를 들어 '내 생일'이 31일 이라고 가정한다면 '#define 내생일 31' 이라고 선언할 수 있을겁니다.

또한 '내생일 - 1'을 하면 31 - 1로 30이 나올것입니다.

'내생일' 이라는건 문자임에도 불구하고 실제로는 31이라는 정수를 대신하고 있는것이죠.

별명의 개념이라고 생각하시면 될 것 같습니다.

제 이름과 별명이 있지만 둘 중 하나만 불러도 알 수 있는것 처럼요.

따라서 위 코드를 보게되면 PI도 3.14를 대신하고있는 '상수' 입니다.


상수의 값은 변경할 수 없으며, 이렇게 상수에 이름을 붙여주는 것을 매크로 상수 라고 합니다.

매크로 상수는 컴파일 후에 'PI'의 값을 3.14로 아래 주석부분처럼 치환한다고 이해하시면 될 것 같습니다.


1

2

3

4

5

6

7

8

9

#include <stdio.h>

 

#define PI 3.14

 

int main(){

    

    printf("PI = %.2lf", PI);

    //printf("PI = %.2lf", 3.14);

}


cs


또한 #define으로 함수 또한 정의할 수 있습니다. 이는 '매크로 함수' 라고 칭합니다.

아래 코드를 살펴봅시다.


1

2

3

4

5

6

7

8

9

10

11

12

13

#include <stdio.h>

 

#define DuckBae(x,y) { x + y }

 

int main(){

    int num1 = 1;

    int num2 = 2;

    int result = 0;

 

    result = DuckBae(num1, num2);

 

    printf("%d\n",result);

}

cs


여기서 보면, result = DuckBae(num1, num2); 가

result = num1 + num2; 로 바뀌게 됩니다. 


#undef

앞에서 #define으로 이미 정의된 매크로를 무효화합니다.


1

2

#define DuckBae(x,y) { x + y }

#undef DuckBae(x,y)

cs


라고 하면 앞으로 사용되는 DuckBae(x,y) 매크로 함수는 ‘undefined symbol’이 되어 에러처리합니다.


#ifdef

#ifdef 헤더명_H__  ~ #endif 구문으로 실행하는 매크로입니다.


헤더파일이 겹치는 것을 막기위해 사용합니다. 



1

2

#include <stdio.h> //====(1)

#include <stdio.h> //====(2)

cs



위와같이 동일한 구문을 두번 썼다고 가정해봅시다.

1번 Line에서 이미 include를 했는데, 밑에서도 include한다면 문제가 되겠지요?

또한 컴파일러가 검사하는 코드도 늘어납니다. 

그래서 stdio,h에는 아래와 같은 코드가 선언되어 있습니다.



1

2

#ifndef STDIO_H__

#define STDIO_H__

cs



stdio.h가 선언되어있지 않으면 선언한다는 구문입니다.

그래서 stdio.h를 (1)에서 먼저 선언했기 때문에 전처리기 단에서 무시합니다.

컴파일러 또한 (1)만 검사를 합니다.




이상으로 전처리문에 대한 포스팅을 마칩니다! 글 잘 보셨다면 아래 하트 꾹 눌러주세요!

블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,