다시 오신 걸 환영해요
이번 강의에서는 C 프로그램을 만들기 위해
무엇이 필요한지 얘기해 볼게요
C# 프로그램 제작에는 네 가지 기본 작업이 있는데요
이런 작업들은 편집, 컴파일링, 링크,
실행이죠
네 C# 프로그램을 작성할 때 거치는 다양한 단계에
관해 얘기했어요 요구 사항을 이해하고 코드를 디자인하고 코드를
작성하고 테스트하고 디버그하는 등 그런 다음
유지한다는 측면에서요
여기서 말씀드리는 건 프로그램을 작성할 때 실제로
해야 하는 거죠 편집과 컴파일도 중요하지만 링크하고
실행하는 것도 중요하죠
제가 얘기하고 싶은 건 세부 사항이에요
네 이런 작업들은 여러분에게 아주 익숙해질 겁니다
C# 프로그램을 쓸 때마다 해야 하니까요
네 소스 코드를 편집하고 컴파일을
하고 링크를 하고 실행을 할 거예요
이걸 자주 하게 될 거예요
네 편집, 컴파일 링크, 실행의 프로세스는 컴파일된
언어가 있는 모든 환경에서 프로그램을 개발할
때 동일하죠
c에만 있는 게 아니에요
네 네 Java 프로그램을 작성하면 소스 코드를
작성하고 컴파일도 해야 합니다
링크요 jva에선 인식하지 못해도 링크를 할
거예요 링크가 뭔지 설명한 다음 프로그램을
실행하죠
이걸 다 해야 해요
C에서 어떻게 하는지 설명하는 거예요
편집은 여러분이 생각하는 그대로예요
실제 코드, C 소스 코드를 생성하고
수정하는 과정이죠
c 소스 코드는 파일 안에 있을 거예요
여러분이 작성한 모든 문장과 모든 지시 사항을
포함하고 있어요
모든 c 소스 코드 파일은 .로 끝나죠 c 확장이요 그렇게 식별하는
거죠 소스 코드 파일이에요
그 전에요 c 확장은 기본 이름이 될 거예요
파일 이름이 의미 있길 바라죠
2numers를 추가한 C 프로그램을 작성하면 add라는
파일이 생기죠 c, 소스 코드를 포함하고 있어요
심폐 프로그래밍은 파일이 다양하다는 걸
기억하세요
파일에 좋은 이름이 있을 거예요
소스 코드를 식별하는 방법은 를 사용하죠 C 익스텐션요
전부 쌍방울이에요 C 익스텐션요
네 네 이제 이 클래스의 코드를 편집할 때 통합 개발 환경을
사용할 겁니다
단순한 편집기만 사용하는 게 아니죠
간단한 에디터의 예로 워드패드가 있겠네요
네 우린 편집기가 있는 걸 이용할 겁니다 코드를 보다
효율적으로 작성하도록 돕는 많은 다른 것들도요
IDE∙∙∙ 이건 IDE라고 합니다 통합 개발 환경이란 뜻이죠
네 네 이 클래스에서 사용할 건 코드블록입니다
상세히 다루겠지만 편집 작업을 위해 코드 블록을
사용할 겁니다
하지만 원하는 건 뭐든 쓸 수 있어요
메모장을 사용하고 싶다면 그보다 더
작은 것을 사용하고 싶다면 아톰을 사용하세요 Visual Studio
IDE가 있습니다 여기서 다룰 것은 코드 편집과 코드 블록입니다
네 이건 멋진 이데예요 제가 이걸 선택한 이유죠 좀 더 자세히
얘기하겠지만 크로스 플랫폼이라 사용이 쉬워요
편집은 기본 프로세스로 코드를 작성하는 거죠
컴파일링요
컴파일러가 뭘 하는지는 알아요
네 고급 언어 코드를 가져다가 기계 언어로 변환합니다
여러분의 코드에서 오류도 감지하고 찾아내죠
코드를 편집한 다음 컴파일러를 실행하는 거죠
컴파일러에 입력값이 소스 코드
전부가 되는 거죠 지금 편집하고 있는 C 파일 전부요
C 프로그램은 많은 원본 파일을 다룰 수 있어요
컴파일러에 입력되는 입력 파일은 소스 파일입니다 컴파일
그 자체입니다 이 코드 변환은 2단계 프로세스예요
첫 번째 단계는 사전 처리 단계예요
그때 여러분의 코드가 수정되거나 추가되죠
두 번째 단계는 컴파일입니다 어셈블리 언어 코드를
생성하죠
이 부분은 사전 처리 단계에서 얘기하도록 하죠
편집에는 두 단계가 있다는 걸 아셔야
해요
네 저희가 중점적으로 살펴볼 것은 혹은 이해하기 쉬운 것은
개체 코드의 생성이고요
네 컴파일러는 각 구문을 보고 구문이
올바른지 확인하고 언어의 의미론이 적합한지
확인합니다
네 문법은 코드의 구조가 올바른지 확인하는 겁니다
문의 끝에는 세미콜론이 있고 데이터
형식을 사용하고 언어의 규칙을 따르고 있는지를요
의미론적이란 단어의 의미죠
ifkey 키워드를 쓰면 그게 조건이에요
의미는 기호 테이블 등을 생성하는 컴필레이션
단계에서 발생하죠
컴파일러는 중요해요
이 개체 코드를 생성할 거예요
구문에 어떤 오류가 있는지 알려줄 거예요
네 가끔 데드 코드가 있는지 없는지 식별할 수도 있어요
코드가 사용되지 않는 경우요
논리적 오류를 찾지 않아요
문법 오류만 찾아내죠
다시 말하지만 구문은 구문과 언어예요
논리적 오류가 의미예요
예를 들어 논리에 문제가 있다면 기능에 문제가
있을 수 있죠
네 코드가 실행될 수 있고 컴파일할 수 있지만 의도한 대로 작동하지 않을 수도 있어요
이걸 논리 오류라고 하죠
컴파일러는 논리 오류가 있으면 알려주지 않아요
네 문자열 대신 숫자를 요구하거나 이름 앞에 성을 요구하는 건
로직 오류예요 ⇲ 오류죠
컴파일러는 그런 유형의 오류를 말해주지 않아요
네 네 컴파일러가 보고한 전형적인
오류는 신고되지 않은 변수나 구문과 일치하지
않는 식입니다 오른쪽 괄호가 없어요 그냥 그러니까 엔딩 블록이
없는 블록이죠
컴파일 오류와 그 의미에 아주 익숙해지실
거예요
그렇죠 바라건대 C# 언어를 배우고 컴파일러를 실행한
후에는 오류가 발견되고 즉시 고칠
수 있기를 바라야죠
이런, 구문을 잊었거나 세미콜론을 잊었네요 이런
저 코드 블록을 끝내기 위해 오른쪽 괄호를 넣는 걸 잊었어요
제2의 천성이 될 거예요
네 오류를 고치고 컴파일이 성공하면
어셈블리 언어로 변환해서 객체 코드를 생성할
거예요
실제 개체 코드는 .이에요 O 파일요
실제 summarylanguage 코드가 실행되죠
확장 기능이 있어요 OBJ나 OBJ요 네 Obj는 윈도우즈윌의 확장이고요 Linux나 Macintosesy템의 O는 확장이고요
코드를 컴파일한 후에 파일제너레이티드를 볼 수 있어요
이게 컴파일의 마지막 단계입니다
실제 조립 언어죠
바이너리가 될 거예요 텍스트처럼 보이지도 않을 거고요
그걸 볼 수 없을 거예요
그냥 이렇게 될 거예요 컴파일러가 이걸 생성하죠
컴파일러 C를 실행하는 방법은 명령을 사용하는 거죠
네 이렇게 많이 할 필요는
없을 거예요 왜냐하면 IDE, 통합 개발에 있는 에디터가 그냥 메뉴 옵션을 클릭하면
알아서 해줄 테니까요 어떻게 되는지 아는 게 중요해요
네 컴파일러 명령을 내릴 때는 일반적으로
NU 컴파일러를 사용해요 Gcc 명령어죠
기본적으로 runa 컴파일러 프로그램은 cc나 gcc이고요
프로그램을 실행하고 입력을 지정하세요
컴파일러가 소스 파일을 입력하는 걸 기억하세요
네 a-c 플래그를 이용해 입력을 지정하고 하나씩
차례로 원본 파일을 지정하는 거죠
여기 예는 cc-cmypog예요 누 컴파일러를 쓰셨네요 Gcc-C는 인기
있는 단어죠
네 c 깃발을 생략하면 프로그램도 자동으로 연결됩니다
다음 단계죠
하지만 명령줄 인터페이스라면 컴파일러를 실행하기
쉽죠
메뉴 옵션만 사용하면 더 쉬워요 이번 시간에는
그렇게 되겠죠
다시 말하지만 Input, C 소스 파일을 가져가요
코드 블록에서요 말씀드린 것처럼
메뉴 옵션을 클릭하면 자동으로 링크가 컴파일됩니다 그런
다음 다른 메뉴 옵션을 클릭할 수 있죠 자동으로 실행됩니다
네 하지만 실제로 진행되는 일은 컴파일러 명령을
C 깃발과 인풋 소스 파일을 발급하는 거죠
컴파일하고 링크해요 그렇죠 말씀드렸듯이 모든 프로그래밍 언어는
링크를 합니다 하지만 대부분 투명해서 무슨 일이 벌어지는지
알 수 없죠
c에서는 링크 프로세스가 중요합니다 항상 투명하지 않기 때문이죠
요즘 대부분의 아이디는
그렇지만 C에서도 중요하다는 걸 강조해야 해요
해스빈의 프로그램을 이렇게 번역했어요 오브젝트 코드에 연결할 준비가
되어 있어요.
네 링크하는 이유는 외부 라이브러리를 사용할
경우 모든 다른 라이브러리를 잡아 하나의 프로그램에 넣어야 하기 때문이죠
링크는 모든 종속성을 제자리에 두고 실행
가능한 파일을 만드는 거죠
정말 짜증 나요 o 파일은 개체예요
모든 걸 연결하는 거죠 하나의 실행 파일로요
다시 말하지만, 이것은 보통 트랜잭션으로
컴파일할 때 자동적으로 발생하죠
하지만 명령어를 따로 해야 할 수도 있어요
a-l 같은 거요
모든 객체파일과 하나의 실행파일을 빌드하죠
실행 파일은 여러분이 실행하는 거죠
이 모든 걸 결합할 거예요
그런 다음 결합하죠
그럴 수도 있죠 네 추가 라이브러리요 여러분이 사용하고 싶은 다른 프로그램이나
다른 사람이 만든 프로그램 혹은 C
언어와 함께 오는 다른 라이브러리 같은 거요
두 개를 합칠 거예요
위상 윌랄소와 연결되어 오류를 감지하고 보고하죠
2단계로 나뉘죠
네 네 다시 연결하는 건 보통 재정의 오류나 존재하지 않는 함수를
호출하는 것과 같아요
그런 게 없다면요 전체 프로그램을 입력하면 오류가
뜰 거예요
온갖 잡동사니가 다 필요할 거예요 네
이것도요 당신 것도 아니잖아요
네 언어가 같을 수도 있죠 표준 라이브러리의 일부일 수도 있고 다른 누군가가
작성한 다른 프로그램일 수도 있어요
그런 건 다 필요하잖아요 오스토는 1을 실행할 수 있어요
네 프로그램 라이브러리는 언어의 일부가 아닌 작업을 수행하는 루틴을 제공함으로써 C 언어를
지원하고 확장할 수 있습니다
입력과 출력 라이브러리 areexample,
수학 라이브러리 문자열 조작 라이브러리요
네 네 같은 거예요 자바 프로그램에 익숙하시다면
자바 API와 같아요
택배도 마찬가지예요
네 파일에 데이터를 쓰고
싶다는 개념이죠 제가 직접 구현하고 싶진 않아요
언어와 함께 오는 기존의 라이브러리를 사용할 겁니다
여전히 C로 쓰여 있어요 어떤 사람 C가 딸려오는 거죠
따라서 온갖 종류의
다양한 라이브러리가 있죠 우리가 배우고 사용할 라이브러리요
링크 단계에서 발생하죠
네 링크 단계에서의 실패는 다시
돌아가서 소스 코드를 수정해야
한다는 것을 의미합니다 개체 파일을 찾을 수 있도록
하기 위해서입니다 실패가 많으면 보통 파일이나 그런 걸 포함해야 합니다 이것도 습관이 될 거예요
성공이에요 성공적으로 컴파일했다면 성공적으로 링크한 거예요
실행 가능한 파일을 생성합니다
윈도우 환경에서는 실행
가능한 파일이 있어요 익스텐션이요
Linux와 Windows에서 기본값으로 a를 갖죠 꺼져요
a의 이름을 바꿀 수 있어요 컴파일러 커맨드와
함께 좀 더 의미 있는 걸 발급하는 거죠
네 대부분의 IDE-인
코드 블록은 단일 작업에서 컴파일과 링크
프로그램을 가져서 실행 파일이 생성됩니다 실행 파일을 더블 클릭하거나 명령이나
메뉴 옵션에서 실행 파일을 실행할 수 있습니다
하지만 낮은 수준의 리눅스에서는 A를
받을 수 있어요 기본값으로 실행할 수 있어요 창문에 A가 보여요 엑세예요
네 일정 규모의 프로그램은 소스 코드 파일 여러 개로 구성되죠
아까도 말씀드렸지만
각 소스 코드 파일은 개체 파일을 생성하기 위해 컴파일러가
필요합니다 그건 링크가 돼야 하죠
더 작은 원본 파일 여러 개로 쪼개면 프로그램이
훨씬 쉬워져요
네 많은 원본 파일을 사용하고 5천 줄의 코드를 가진
원본 파일은 원치 않겠죠
통일성이 없어요
관리하기가 쉽지 않아요
네 그래서 소스 코드를 포함하는 파일을
만들 건데 그 소스 코드는 특별하죠
아주 훌륭한 기능을 갖게 될 거예요
덕분에 작업이 훨씬 쉬워지고 오류도
훨씬 제거하기 쉽고 훨씬 더 응집력 있죠
그래서 작은 소스 파일을 havemany 할 거예요
수천 줄의 코드가 있는 큰 소스 파일을 원하진 않죠
원본 파일들이 전체 프로그램을 구성하고 있어요
다들 고꾸라질 거예요 컴파일러에 입력하도록
되어 있어요
프로그램을 구성하는 이 모든 개념은
본질적으로 프로젝트이기도 하죠
좀 더 높은 수준으로 생각해 보세요
당신 프로젝트고 당신 프로그램이에요
네 마침내 이걸 다 하고 링크를 걸고 나면 실행 가능한 파일이
생기죠 프로그램을 실행할 수 있습니다
대부분의 IDE에서는 메뉴 클릭을 하거나 윈도우에서
더블 클릭을 할 수 있어요 EXe를 더블 클릭할 수 있어요
Linux 사용 중이시라면 a를 입력하세요 꺼져요
네 아웃입니다 어떤 권한이 있어야 하죠 모드 변경 명령을 발부해야 합니다
하지만 실행하려면 이렇게 말할 수 있죠 네 명령줄에서 프로그램이
실행될 거예요
하지만 보통 이런 건 견인할 필요가 없죠 실행 단계는 프로그램을
실행하는 단계죠
프로그램의 각 문장은 순차적으로 실행되죠
프로그램이 사용자에게서 anydata를
요청하면 프로그램이 멈추고 그 입력을 받죠
네 입력값은 키보드로 받을 수도 있고 그래픽 사용자 인터페이스를 통해 받을 수도 있습니다
C# 코드에 그걸 위한 라이브러리가 있다면요
프로그램에 표시된 결과는 콘솔이라
부르는 창에 나타나요
코드 블록에 대해 얘기할 때 예제를 보여드릴게요
하지만 프로그램을 실행하면 출력을 보게 되죠
늘 그런 건 아니죠, 가끔은 프로그램이 산출되지 않는 걸 만들기도 해요
하지만 보통은 단말기나
콘솔에서 출력을 볼 수 있어요
사형 집행 단계에서도 다양한 오류가 발생하죠
그래서 잘못된 출력을 만들
수도 있어요 그냥 논리 오류죠 돌아가서 소스 코드를 수정해야 해요
논리에 문제가 있어서 아무것도 안 할 수도 있어요
네 그런 다음 마지막으로
컴퓨터가 크래시될 수 있어요 최악의 경우죠 프로그램에서
정말 나쁜 걸 했는데 너무 나빠서
프로그램이 죽거나 운영 체제의 다른 프로그램이
크래시되게 할 수 있어요
C# 응용 프로그램 실행은 문제를 일으키죠 네 프로그램이 의도한 기능을 수행하지 않으면 소스 코드를
수정해야 해요 재정비나
재설계를 해야 할 수도 있습니다 다양한 단계에
대해 말씀드렸습니다
오류를 찾아 고치는 디버깅페이스로 알려져 있죠
디버깅에 전체적인 부분을 정할
거예요 그만큼 중요하니까요
학습의 가장 좋은 방법 중 하나는 실수를 통해 배우는
거라고 말씀드렸죠
계속해서 소스 코드를 수정하고 디버깅을 해야 하죠
네 컴파일과 프로그램을
연결하고 실행하는 전체 과정은 코드의 기능에
필요한 모든 결과를 얻을 때까지 반복되죠
여기서도 멋진 연기를 보여드리고 싶어요
호튼이 쓴 책의 시작 C에서 따온 거예요
하지만 이런 과정을 거쳐야 해요
소스 코드를 편집할 거예요
a로 파일을 생성하세요 c 확장과 의미 있는 이름이요
네 그 작업엔 에디터나 IDE를 사용할
겁니다 통합 개발 환경이나 코드블록 같은 거요
그걸 컴파일하는 거죠
컴파일러가obj 파일, o 파일을 생성하고 있어요
네 해당 파일을 생성하지
못하면 에러가 있다는 뜻이고 돌아가서 고쳐야 하죠
네 그렇죠 obj 파일을 생성하고 나면 개체 파일을 생성하면 실행 가능한 파일을 생성하기
위해 그것들을 모두 연결해야 합니다
그 단계에서 제대로 연결되지
않은 경우도 있어요
소스 코드로 돌아가야 해요
오류가 없고 실행 가능한 파일이
있으면 프로그램을 실행할 수 있어요
프로그램을 실행한 후에도요 여전히 오류가 있을 수 있어요 논리
오류일 수 있으니까요
소스 코드를 수정할 수 있죠
그래서 이건 지속적인 프로세스가
될 겁니다 여러분이 아주 익숙해지실 거예요
편집, 컴파일, 링크, 실행이요
모든 언어에서 일반적으로 하는 거죠
네 프로그램이 요구 사항을 모두 충족할 때까지
이걸 계속 반복하는 거야