분석 : 어휘 분석 => 구문 분석 => 의미 분석 과정을 통해 오류가 없는지 파악하고 그 결과를 기계코드로 생성
어휘 분석 단계
: 각각의 키워드를 분리해냄
ex. a / = / 3 / + / b / ; /구문 분석 단계
: 어휘들이 올바른 관계로 놓여져 있는지 본다. 문법 검사를 하는 것
ex. a 3 + b; => 이런건 컴파일러가 구문오류가 있다고 판단 (할당기호가 없네)의미 분석 단계
a = 3 + b ; 에서 b가 숫자가 아니라 문자면 문제가 됨
IL코드
실행파일로 만들어주는데, 이것을 컴퓨터가 직접 실행하지 않음
CLR 이라는 가상머신이 IL코드를 읽어들이고 기계 코드로 바꾼다
C#은 컴파일 과정과 인터프리터 과정이 어느정도 섞여있다.
namespace Hello { class MainApp { //프로그램 실행이 시작되는 곳 static void Main(string[] args)//args = arguments 라는 뜻 { if (args.Length == 0) { Console.WriteLine(“사용법 : Hello.exe<이름>"); return; } WriteLine("Hello , {0}!",args[0]); //Hello, World를 프롬프트에 출력 } } }이름>
- 실행 : 프로그램을 실행하려면 실행파일을 생성해야한다
- 빌드 > 솔루션 빌드 : 경로에 빌드된 결과물이 저장된다
1>—— 빌드 시작: 프로젝트: Hello, 구성: Debug Any CPU —— 1>Hello -> C:\Users\my\source\repos\Hello\Hello\bin\Debug\netcoreapp3.1\Hello.dll ========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========
- 해당 디렉토리로 이동하기 위해 솔루션 탐색기에서 Hello 프로젝트항목을 선택하고 우클릭해서 '파일 탐색기에서 폴더 열기'
- 명령 프롬프트 창열기 : window + r키 +q키 -> cmd입력 -> 파일탐색기 주소 복사 or cd 하고 끌어 당기기
```python
C:\Users\my>cd C:\Users\my\source\repos\Hello\Hello
2022-06-25 오후 07:47
C:\Users\my\source\repos\Hello\Hello>
- 파일 열기 : 강의에는 net5.0 으로 되어있는데 나는 netcoreapp3.1폴더로 되어있어서 그렇게 했다
```python
C:\Users\my\source\repos\Hello\Hello>cd bin
C:\Users\my\source\repos\Hello\Hello\bin>cd Debug
C:\Users\my\source\repos\Hello\Hello\bin\Debug>cd net5.0
지정된 경로를 찾을 수 없습니다.
C:\Users\my\source\repos\Hello\Hello\bin\Debug>cd netcoreapp3.1
C:\Users\my\source\repos\Hello\Hello\bin\Debug\netcoreapp3.1>Hello.exe
사용법 : Hello.exe<이름>
C:\Users\my\source\repos\Hello\Hello\bin\Debug\netcoreapp3.1>Hello 꽁주킴
Hello , 꽁주킴!
인수가 없어서
사용법 : Hello.exe<이름>
이렇게 나옴
인수가 있으면Hello , 꽁주킴!
이렇게 나옴
using System;
using static System.Console;
namespace Hello
{
class MainApp
{
//프로그램 실행이 시작되는 곳
static void Main(string[] args)//args = arguments 라는 뜻
{
if (args.Length == 0)
{
Console.WriteLine("사용법 : Hello.exe<이름>");
return;
}
WriteLine("Hello , {0}!",args[0]); //Hello, World를 프롬프트에 출력
}
}
}
static void Main
: 프로그램 시작점!.Length
: 문자열 길이Q.
using System
이랑using static System.Console
의 차이?
A. C# 6.0에서는 using static 클래스명을 써 준다면, 해당 C# 파일 내에서는 해당 클래스명 없이 메서드를 직접 사용할 수 있게 하였다. 예를 들어 아래 예제에서 처럼 처음 System.Console 클래스를 using static 과 함께 지정한 후에는 본문에서 Console.WriteLine() 대신 WriteLine()을 직접 사용할 수 있다. 출처