안녕하세요,
이 비디오에서는 컴파일 오류가 뭔지 설명해 드릴게요
지금까지는 말이죠
네
네 네 그리고 코드를 작성하고
나서
네
보통 코드에 오류가 있다는 멋진 설명이 있어요 하지만 그게 정확히 무슨
뜻이죠?
네 네 프로그래밍 언어를 위해 코드를 작성할 때 프로그래밍 언어는 아주 엄격해요
규칙이 있어요
프로그램을 실행하려면 규칙을 따라야 해요
컴파일러가 코드의 구문을 확인할 거예요
맞아요 그게 맞고 의미적 오류가 없다면 소스 코드, 기계 언어 유형 코드에서 생성돼
프로그램을 실행할 수 있어요
이 규칙들을 따라야 하는데 아주 상세한 규칙들이죠
그래서 아주 세밀하게 작업해야 해요
컴파일 오류는 두 가지 형식으로 나타나요
구문 오류나 의미적 오류 형태로 올 수 있어요
네 구문 오류는 코드의 구조에 문제가 있는 경우예요
언어의 규칙을 따르지 않는 경우죠
올바른 공간에 괄호를 넣는 게 아니죠
모든 문장에 세미콜론을 붙이지 않아도 돼요
설마 키워드 오타예요?
이게 다 일반적인 예죠
세미콜론은 처음 시작할 때 아주 흔한 거예요
변수를 선언하고 5에 할당했는데 마지막에 세미콜론이 없으면
그건 구문 오류예요
구조가 이상해요
printf를 이용할 때와 같습니다 큰따옴표 안에 printf를 넣었습니다
큰따옴표의 끝부분을 잊었네요
구문 오류예요
그래서 컴파일러의 구조에 뭔가 잘못된 것이 있으면 일반적으로 소스 코드를 스캔하고 오류를
찾게 됩니다 그러면 일반적으로 설명적인 오류가 생깁니다 즉, 올바른 방향을 가리킬 수 있다는 것입니다 그리고 일반적으로
줄 번호를 알려주죠
이전 비디오에서 봤었죠
컴파일러가 잡을 수 있는 또 다른 오류 유형은 의미 중심 오류예요
네 네 논리적 오류라면 의미론적 오류를 잡아내진 않지만 의미론적 오류는 보통 의미에 문제가
있다는 뜻이에요
프로그램의 목적이죠
네 그래서 예를 들어 변수 두 개를 더한다고 해 보죠 A와 B요 하지만 변수들이 형식이
달라서 말이 안 돼요
A와 B를 더하는 건 말이 안 돼요
컴파일러가 이런 의미 중심 오류를 잡아낼 수 있어요
논리와 관련된 다른 의미적 오류도 있는데 그런 걸 논의할 거예요
컴파일러가 항상 그런 걸 찾지는 않죠
네 구조도 맞고 구조상 아무 문제 없었는데 논리적으로 뭔가 잘못된 거예요
코드의 논리에 오류가 있어요
네 그래서 의미 중심 오류는 컴파일러가 잡을 수 있는 건 형식 잡기 같은
것과 더 관련이 있어요 해서는 안 되는 것도 있고요 언어 내 다른 규칙과 관련돼
있죠 변수 형식 같은 거요
네 이제 코드 라이트에서 C# 프로그래밍 언어의 일반적인 문법과 의미 중심 오류의
예제를 살펴보죠
간단한 Hello world 형식의 응용 프로그램이에요
프로젝트 설정에서 생성된 코드예요
템플릿으로 저장해 뒀다면요
아주 간단한 코드죠?
이 파일을 컴파일할 때 구문에 에러가 있는지 없는지 알려 줘요
다시 오른쪽 클릭해서 컴파일하세요
지금은 아무 에러도 없죠?
하지만 구문적으로는 모든 규칙을 따르고 있어요
하지만 구문은 코드의 모든 구조를 포함하고 있어요
네 그래서 세미콜론이나 우물정자가 없으면 include 전에 말이에요 그걸 컴파일하세요
오류가 있다는 걸 보실 겁니다 보통 오류 컴파일러 오류는 의미가 있거든요
자 이제 코드를 더 많이 쓰고 더 연습할수록 컴파일러들은 둔감해지지 않을
거예요
네 설명이 그리 비과학적이지 않을 거예요 익숙해질 겁니다 예를
들어 이 오류는 1번 줄에 오류가 있다는 거죠 맞아요
그래서 좋아요
더블 클릭할 수 있어요
그 오류로 가겠지만 예상 = 세미콜론이라고 나오죠
뭐가 문제인지 알 수 없어요
프로그래밍 연습을 하다 보면 우물 정자를 잊었다는 걸 알게 되죠
일부 컴파일 에러는 프로그래밍 초보자라면 묘사적이지 않아요
그걸 추가하고 파운드 기호를 추가하고 재편집하면 다 된 거죠
철자를 틀리면 못 찾을 때도 있어요
저장하고 재편집하면 좀 더 설명적인 오류가 나오죠
그렇죠?
그런 파일이나 디렉토리 Stdio는 없어요 철자를 잘못 썼다는 걸 알 수 있죠
철자 오류는 흔한 실수예요
괄호가 안 맞는다는 측면에서 올바른 관점을 제시하지 않는 거죠
괄호를 잊어버리면 다시 재구성해야 해요
그 오류가 어떤 건지 보죠
그것도 별로 설명이 안 되죠
네 이렇게 말하죠 끝부분 전에 괄호가 있어요 중괄호요 왜냐하면 모르니까요 오른쪽
괄호가 여기 어딘가에서 끝날 거라고 생각하는 거죠
항상 상황을 정확히 알 수는 없어요
괄호와 빠진 중괄호는 서술적이지 않을 때가 있어요
하지만 세미콜론 같은 게 빠진다면 아주 간단하죠
컴파일 오류는 무슨 일이 벌어지는지 정확히 말해주죠
반환 전이죠 예상되는 세미콜론은 어디에 넣어야 할지 가리키기도 해요
네 더블 클릭해서 큰따옴표가 빠지면 세미콜론을 입력하고 재편집하세요
그렇죠?
큰따옴표 중단을 누르면 빠진다는 게 보이시죠
네 다시 한 번 첫 번째 따옴표가 어디서 발생하는지 알려주고 여러 개의 오류를 만들어줍니다
여러분에게 오류가 하나밖에 없는데도요
큰따옴표를 사용하면 다 된 거예요
이 메인은 int를 반환해야 한다고 말하고 있어요
큰따옴표 안에 있는 뭔가를 실제로 반환하려고 한다면요?
다시 언어의 구조를 따르지 않고 있어요 기본적으로 함수 형식으로부터 캐릭터 포인터를
반환한다고 말해주죠
다시 컴파일 에러는 지금은 이해가 안 되겠지만 코드를 더 작성하면
쓸수록 더 이해가 될 거예요
하지만 그 구조를 따르는 게 중요해요
네 이제 구문적으로 말이 되게 하려고 하는데 의미가 정확하지 않을 수 있어요
네 예를 들어 F를 쓴다고 해보죠 그런 다음 8로 나누거나 7로 나누기
같은 연산을 해보려고 해요
저장하고 컴파일하면 더 의미 있는 오류가 생기죠 큰따옴표 뒤에 디비전 기호가 있는
경우요
네 세미콜론 C를 기대했던 곳이 어디인지 아세요? 주로 문법 오류나 의미론적 오류를 발견하죠
코드의 의미는 보통 논리와 관련이 있어요
C++ 같은 언어를 쓰면 더 많은 의미적 오류가 발생하죠
물건요
컴파일러에서 구문 오류가 있는지 찾아보세요
철자를 잘못 쓰는 건 흔한 일이죠
네 키워드요 시작 시 괄호를 끝내지 않는 것 끝과 시작 블록이
없을 때 여러 개의 에러가 있을 수 있죠
Hello world가 있다고 해보죠
세미콜론이 빠졌네요
스트링을 반환하는 거예요
브래킷이 없는 상황에서도 조립을 했어요
이 프로그램은 규모가 작아요
하지만 지금 컴파일하려고 하면 여러 개의 에러가 보이죠?
두 번 실수했어요
어디서부터 시작해야 할지 고민이에요
보통 첫 번째 오류를 고치죠 때론 오류 하나가 더 많은 오류를 야기하거든요
그래서 여러분은 항상 컴파일러 오류를 맨 위에서 보고 싶어하죠 그리고 그것부터 고치세요
5번 라인을 고치겠다는 거죠?
네 수정하고 다시 스캔하고 6번 라인에서 수정하면 돼요
제이슨이라고 나오네요
반환 0이라고 말할 수 있죠 하지만 다음 오류를 수정하기 전에 항상 첫 번째 오류를 수정하세요 하나가
다른 오류를 초래할 수 있으니까요
그런데 우리 코드에 항상 오류가 있어요
아무리 노련한 프로그래머라도 문법 오류는 생길 수 있어요
그래서 오류가 있는 게 일반적이죠
중요한 것은 컴파일러로부터 오는 메시지를 이해하고 그것을 수정하는 방법을
이해하는 것이죠
연습 때 나올 거예요
네 컴파일러와 공통 컴파일러의 미래의 비디오에 대해 좀 더 얘기하겠지만 언어의 구조를
배우면서 따르고 있는지 확인하도록 하겠습니다 구문 언어 같은 거요
다음 강의에서는 다양한 유형의 오류를 다룰 텐데요
논리 오류도 언급했죠
경고에 대해서도 약간 얘기할 수 있어요
링커 에러와 런타임 에러도 다룰 거예요
고마워요