C# nullreferenceexception: object reference not set to an instance of an object

2019-01-13 21:12:41

main()에 대해서

C언어 시작하기

프로그래밍 언어는 인간과 컴퓨터가 대화를 하기 위한 언어입니다. 인간이 명령을 내리고 컴퓨터가 실행하기 때문에, 기계어보다는 C 언어처럼 인간이 사용하는 언어와 가까운 고급 언어를 사용하죠

아래의 코드를 코드블록에 직접 작성하고 컴퓨터와의 대화를 시도해봅시다!

코드를 작성한 후 키보드 [F9]버튼 이나  상단의 [Build]-[Build and run]을 눌러 이용합니다.

#include <stdio.h> main () { printf ( “Hello world”); }

실행결과

위 프로그램을 실행하면 “Hello world”라는 결과가 나타납니다.                                                                         (만약 사진이 보이지않는다면 새로고침 해주세요)

C# nullreferenceexception: object reference not set to an instance of an object

  • 여러분은 "Hello world"를 출력하는 프로그램을 만든 거에요!!
  • 4행에서 컴퓨터에게 “Hello world”를 출력하라는 명령을 내리고, 그 명령에 따라 컴퓨터가 문장을 출력하는 것이죠

main()과 헤더 파일

c언어 프로그램을 만들기 위해서는 헤더 파일과 main()이 꼭 있어야 합니다.

그럼 main()과 헤더 파일은 무엇일까요?

main()

c언어 소스 코드에는  main()이 꼭 있어야 하고, 사용하는 명령들의 내용이 미리 기록된 헤더파일을 참조하여 프로그래밍 합니다.

소스 코드 – 사용자가 작성한 코드로 컴파일러에 의해 번역되지 않은 상태의 프로그램 파일(*.c)을 뜻합니다.

컴파일러 – 고급언어 프로그램(C/C++등)을 기계어로 번역하는 프로그램

(우리가 쓰고있는 code::blocks또한 컴파일러에 속하죠)

main()이 왜 꼭 필요한지 알아봅시다.

아래의 코드를 직접 작성하고 실행해 봅시다!
 

main(){}

실행결과

위 프로그램을 실행하면 오류 없이 실행되고 아무것도 출력되지 않습니다.

C# nullreferenceexception: object reference not set to an instance of an object

  • 위 프로그램은 가장 간단한 C언어 프로그램으로, 오류 없이 컴파일되고 정상적으로 실행됩니다.

컴파일 – 쉽게 말하면 변환을 하는 것이죠 흔히 쓰는 언어(C/C++)들은 컴퓨터가 알아듣지 못하는 인간지향적으로 설계되어 있으며 이것을 컴퓨터가 알아들을 수 있도록 기계지향적 언어(기계어)로 변환하는 방법이 컴파일입니다.

  • C 언어 프로그램은 main() 함수 내부에 실행해야할 내용들을 작성하는 것이 기본이며 main() 함수에는 C프로그램의 시작부터 종료까지 실행되는 내용들이 작성되어있습니다.

함수 – 여러 명령의 집합을 말합니다. 함수 이름(){실행할 내용}의 구조로 되어있고 종류와 사용법이 다양합니다.

  • C언어 프로그램은 main() 함수를 기본으로 여러가지 명령과 함수들을 사용하여 작성됩니다. 프로그래밍의 기본은 사용자가 필요한 명령들을 코딩하는 것이고, 여러 명령들을 반복해서 사용할 경우 그것을 함수나 작은  단위의 부프로그램 형태로 코딩하는 것입니다.

부프로그램– 하나의 프로그램을 구성하는 여러 작은 단위의 프로그램으로 일련의 명령문들을 모아두고, 이를 외부에서 호출할 수 있게한 구조입니다.

main()과 C 언어 프로그램의 구조

main() { <요놈 함수 1(); 함수 2(); 여러가지 문법; : } <요놈이 코드블록(블록)이라고 합니다.
  • C언어 내부의 모든 명령들은 위에서 아래로 작성하며, 각 문장의 끝에는 문장의 마지막을 나타내는 마침표(.)와 같은 의미로 세미콜론(;)이 사용됩니다.

  • 작은따옴표’ ‘, 큰따옴표” “, 소괄호 ( ), 중괄호{ }, 대괄호[ ]와 같이 쌍으로 사용되는 기호들이 있으며, 실행되는 문장이 2줄 이상일 경우 중괄호{ }를 사용하여 묶어주는데, 이를 코드블록(code block)이라고 합니다.

다음에는 main()함수와 같이 프로그램을 만드는데 필요한 헤더 파일에 대해 알아봅시다.

C 언어는 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 유닉스 운영체제를 만들기 위해 고안한 프로그래밍 언어입니다.

그런데 A 언어도 아니고 왜 C 언어일까요? 처음에 켄 톰슨은 BCPL 언어를 입맛에 맞게 고쳐서 B 언어(벨 연구소의 첫 글자 B를 따서 B 언어로 지음)를 개발했는데 후에 데니스 리치가 B 언어를 개선하여 C 언어가 탄생했습니다.

그림 1‑8 C 언어의 역사
C# nullreferenceexception: object reference not set to an instance of an object

C 언어는 이후의 프로그래밍 언어에 직간접적으로 많은 영향을 주었는데 C 언어를 배우면 다른 언어를 배우기 쉽다고 하는 이유도 이 때문이죠. 프로그래밍 세계의 공통어라 할 수 있습니다.

우리가 지금도 쓰고 있는 Windows, 리눅스, OS X와 iOS, Android, Windows Phone 모바일 운영체제의 핵심 요소인 커널은 C 언어로 만들어져 있습니다(약간의 어셈블리가 포함됨). 즉, 운영체제의 모든 기능을 이용할 수 있는 건 C 언어죠. 다른 언어들은 모두 C 언어의 기능(라이브러리)을 가져다 쓰는 구조입니다.

그림 1‑9 C 언어로 개발된 운영체제
C# nullreferenceexception: object reference not set to an instance of an object

그럼 운영체제 말고 C 언어는 또 어디에 쓸까요? Oracle, SQL Server, MySQL과 같은 데이터베이스도 C와 C++로 만들어져 있습니다(C++은 C를 기반으로 객체지향 개념을 추가한 언어). 그리고 에어컨, 세탁기, 스마트 TV 같은가전 제품에는 작은 컴퓨터가 들어있는데 이 컴퓨터는 주로 C 언어를 사용합니다. 또한, 자동차 ECU나 사물인터넷(IoT)도 C 언어를 많이 사용합니다.

특히 메모리와 하드웨어를 직접 제어하는데는 C 언어를 따라갈 언어가 없습니다. C와 C++을 제외하면 메모리를 직접 제어하는 범용 언어는 많지 않습니다. 스마트폰의 하드웨어를 직접 제어하는 커널이 대부분 C 언어로 작성된 것도 이 때문입니다.

우리 눈에 잘 띄지는 않지만 C 언어는 컴퓨터 세상의 단단한 기반을 이루고 있습니다.

참고 | TIOBE 프로그래밍 언어 순위

  • http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
표 1‑1 TIOBE 프로그래밍 언어 순위
순위프로그래밍 언어
1 Java
2 C
3 C++
4 Python
5 C#
6 PHP

여기서 C 언어와 Java는 1위가 서로 바뀌는 언어인데 C 언어도 Java에 못지 않게 인기가 많습니다.

이제 C 언어를 배워야 할 이유가 명확해졌습니다. C 언어는 C++, Java, C#, Objective-C 등의 언어에 큰 영향을 주었기 때문에 이들 언어는 문법을 비롯하여 많은 부분이 C 언어와 유사합니다. 그래서 C 언어를 배우면 다른 언어를 배우기가 쉽습니다.

C 언어가 어렵다는 평가도 있지만 프로그래밍의 기초를 제대로 배우기 좋은 언어입니다. 일단 메모리 관리나 하드웨어에 관련된 내용도 배우기 때문에 컴퓨터의 동작 원리를 함께 이해할 수 있습니다. 이는 다른 언어를 배울 때뿐만 아니라 실무에서도 큰 도움이 됩니다.