2011-11-29 6 views
2

나는 C#에서 빈 문에 대한 질문을 많이 보았다합니까 C# 컴파일러 최적화 빈 문

 string retVal="mystring";; 

내 질문은 : 우리는 하늘의 문을 제거하지 않으면, 컴파일러가 최적화 단계에서 제거합니다 ?

답변

5

예. 빈 문장을 사용하거나 사용하지 않고 응용 프로그램을 컴파일하고 컴파일 된 응용 프로그램에서 md5 체크섬을 확인하여 직접 확인할 수 있습니다.

+11

나는 IL을보고 MD5를보고 싶습니다 ... –

+4

+1 ...하지만 Reflector, ILSpy 등을 사용하면 아마도 빈 문장이 제거되었다는 것을 "증명"하는 더 좋은 방법 일 것입니다. MD5 합계는 빈 문장과 반드시 ​​관련이없는 변경으로 인해 변경 될 수 있습니다. – Steve

4

예, 세미콜론은 구문 일뿐입니다. 단순히 구문이 끝나는 부분을 구문 분석기에 알려줍니다. 파서는 불필요한 공백이 렉서에 의해 제거되는 것처럼 "빈 문장"을 제거합니다.

+1

eek ... "공백을 제거하는 것과 비슷합니다". 공백 문자는 렉서 (lexer)에 의해 제거되고, 파서에 의해 빈 문장이 제거되고 최적화 단계에 의해 불필요한 문장 ('if (false) {...}'와 같은 문장)이 제거됩니다. 미묘한 차이. – riwalk

+0

@ Stargazer712 : 좋은 지적, 고마워. –

5

빈 문 (사용자가 인용 한 문과 비슷 함)은 일반적으로 파서가 인식하고 추상 구문 트리로 만들지 않습니다.

그래, 그들은 절대적으로 제거됩니다.

+0

필자는이 답변이 가장 좋기 때문에 파서는이를 제거하므로 컴파일러는 결코 그것을 보지 못한다. 이것은 최적화가 켜져 있는지 여부에 관계없이 발생합니다. 이 경우에는 컴파일러의 함수조차되지 않습니다. – mattypiper