[Visual Studio] - MSBuild 도구와 sln, vcsproj 파일 - 개발자의 ctrl+s라 불리는 빌드(ctrl+shift+B) 단축키는 도대체 어떻게 동작하는 것일까?- .sln, .vcxproj 파일에 대해.. #1. Visual Studio와 MSBuild.exe ▷ Visual Studio에서 빌드는 어떻게 동작할까? 예전에 아무것도 모를 때는 그저 컴파일러와 링커를 일일이 호출하는 방식으로 동작하지 않을까 막연히 추측했다. 물론 틀린 말은 아니다. MSVC 컴파일러(cl.exe)와 링커(link.exe)가 빌드에 관여하기 때문이다. Visual Studio를 깔면 보통 아래의 경로에 컴파일러와 링커가 존재한다.(C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433\.. 2024. 12. 26. [C언어] - C언어의 이식성에 대해 정리 ▷ C/C++을 흔히 이식성이 좋다고 이야기 한다. 틀린 말은 아니지만, C/C++을 처음 배울 때 나는 이것을 제대로 이해하지 못했다. 나는 C/C++로 빌드한 결과물이 이식성이 좋다고 착각했던 것이다. ▷ 생각해보면 C/C++로 빌드한 결과물은 이식성이 좋다고 할 수 없다. 다양한 크로스 플랫폼 기반의 프로그래밍 언어(Java, Python, Node.js, ...)가 개발된 지금 이 시점에서는 C/C++이 이식성이 나쁘다고 말해야 할지도 모르겠다. ▷ Java, Javascript, Python은 가상머신과 인터프리터가 있으므로 플랫폼에 종속되지 않는다. 그래서 이식성이 정말 좋다. Java와 같이 중간 언어로 컴파일되는 언어도 마찬가지로 그 오브젝트 코드를 windows에서 linux로 이식해도 .. 2024. 12. 26. [Visual Studio] - 문자 집합 옵션과 UNICODE 매크로 #1. [문자 집합] 옵션은 문자열의 인코딩과 별개다. ▷ 프로젝트 속성 페이지에는 위와 같이 [문자 집합] 설정 옵션이 있다. 여기서 대부분의 Visual Studio 프로젝트는 기본값으로 "유니코드 문자 집합 사용"이 선택된다. ▷ 예전에 나는 이것을 오해하여, 유니코드 문자 집합을 사용하니까 소스코드의 문자열이 UTF-16으로 인코딩되는 건가? 라고 생각했다. 그러나 문자열이 어떻게 인코딩되어 있는지 빌드된 실행 파일의 바이너리를 살펴보면 유니코드와 전혀 상관 없이 인코딩된 모습을 볼 수 있다. ▷ "hello한글"이라는 문자열이 위와 같이 인코딩되었다. 이것은 유니코드가 아니라 CP949다. 이와 관련한 내용을 자세히 포스팅한 링크를 보자 → (링크).. 요약하자면 문자열("")은 MSVC가 .. 2024. 12. 26. [Visual Studio] - CRT 런타임 라이브러리의 빌드 방식 #1. 의문 : 링커는 어떻게 C/C++ 표준 라이브러리를 찾는가? ▷ Visual Studio 즉, MSBuild 환경에서 컴파일러에게 외부의 정적 라이브러리를 연결하는 방식은 간단히 요약해 아래와 같다. 1) [추가 포함 디렉터리]에 헤더파일의 경로를 추가한다. 2) 라이브러리의 경로를 링커에게 알려준다. 보통 [추가 라이브러리 디렉터리]에 추가한다. 3) 라이브러리의 이름을 링커에게 알려준다. 보통 [추가 종속성]에 추가한다. ▷ 위와 같은 방식으로 MSBuild는 컴파일러(cl.exe)와 링커(link.exe)를 동작시킨다. C/C++ 표준 라이브러리나 Windows SDK 관련 헤더 파일은 환경 변수 INCLUDE(포함 디렉터리)에 실제로 존재한다. 헤더 파일을 찾는 것은 문제가 없다. ▷ 외부.. 2024. 12. 26. [Visual Studio] - #include 따옴표(")와 꺾쇠(<>)의 차이 1) 와 같은 표준 라이브러리의 헤더 파일들은 도대체 어디서 가져오는 것이냐?2) , 와 같은 윈도우즈 개발 시 사용하는 헤더 파일들은 도대체 어디서 가져오냐?3) 내가 만든 라이브러리의 헤더파일, 혹은 다른 사람이 만든 헤더 파일을 로 가져오고 싶다면?- 기준 : Visual Studio Community 2022 버전. - 그러나 내 생각에는, VS의 버전이 달라도 큰 틀에서 기능이 크게 다르진 않을 것이라 생각한다. #1. include 꺾쇠() ▷ 설정을 따로 건드리지 않았다면, #include 같이 꺾쇠()로 표현되는 헤더파일에 대해 VS(MSBuild)는 기본적으로 [VC++ 디렉터리] - [포함 디렉터리]에 설정된 디렉터리 경로부터 검색하며 헤더 파일을 찾아 전처리를 수행한다. ▷ 포.. 2024. 12. 24. [Visual Studio] - 정적 라이브러리와 같이 빌드하기 ※ 정적 라이브러리를 제대로 가져오려면 헤더 파일도 제대로 가져와야 동작한다. 아래의 포스트를 참고.)의 차이" data-og-description="1) 와 같은 표준 라이브러리의 헤더 파일들은 도대체 어디서 가져오는 것이냐?2) , 와 같은 윈도우즈 개발 시 사용하는 헤더 파일들은 도대체 어디서 가져오냐?3) 내가 만든 라이브러리의 헤더파" data-og-host="linocraft.tistory.com" data-og-source-url="https://linocraft.tistory.com/216" data-og-url="https://linocraft.tistory.com/216" data-og-image="https://scrap.kakaocdn.net/dn/b1tS52/hyXOgdBulA/x.. 2024. 12. 24. [Visual Studio] - 소스파일과 빌드 산출물을 깔끔하게 구성하는 방법 - Microsoft의 Visual Studio(IDE)는 빌드 산출물을 다소 복잡하게 구성하는 편이다. (주관적)- 따라서 옵션을 조정해 빌드 결과를 깔끔하게 정리해본다.- 내용이 사실 굉장히 주관적일 수 있다.- 원칙은 간단하다. 분류가 내 마음에 들지 않거나, 나에게 필요하지 않으면 과감하게 삭제하자는 것!!- vcxproj.filter는 무슨 파일인가? 1) 정말로 쓸모가 있는 분류인가? ▷ 화면에 윈도우 창을 하나 출력하는 아주 간단한 프로젝트를 VS에서 생성하면 아래와 같이 배치된다. ▷ VS가 자동으로 만들어준 기초적인 템플릿이다. 많은 파일들이 있으나 VS는 이 파일들을 [리소스 파일], [소스 파일], [헤더 파일]로 분류해준다. [외부 종속성]은 프로젝트가 의존하고 있는 라이브러리.. 2024. 12. 23. [Windows] - 윈도우즈 시스템 프로그래밍에 대해 가졌던 오해 ▷ 윈도우즈 시스템 프로그래밍이란 쉽게 말해, Windows가 제공해주는 C/C++ Windows API 라이브러리를 사용해 Windows에서 동작하는 소프트웨어를 만드는 것을 말한다. 대부분의 API를 windows.h 파일에 찾을 수 있다. ▷ 처음에 나는 이걸 착각해서, Windows API를 사용해 GUI를 만드는 것을 시스템 프로그래밍이라고 오해했다. 틀린 말은 아니지만, 시스템 프로그래밍은 GUI 뿐만 아니라 Windows 시스템 전반의 기능을 활용할 수 있는 프로그래밍이다. 따라서 콘솔 환경에서만 동작하는 Windows 시스템 프로그램도 가능하다. ▷ 이렇게 말하면 C/C++ 표준 라이브러리를 놔두고 왜 굳이 또 Windows API를 사용해야 하는지 의문이 들 수 있다. 그러나 C/C++ .. 2024. 12. 22. [Windows] - char과 wchar_t의 차이점 (MBCS와 유니코드) #. 일반 문자열과 L유니코드 문자열의 차이 ▷ 우선, 소스코드 자체는 UTF-8로 인코딩되었고, VC 컴파일러 옵션에도 소스코드가 UTF-8로 인코딩되었다고 설정했다. (설정 방법은 여기 링크) ▷ 실제로 소스코드 텍스트 파일 자체의 바이너리 값을 보면 문자열도 UTF-8로 인코딩되어 있다는 것을 알 수 있다. ▷ 그러나 이건 어디까지나 텍스트 파일에 불과한 소스코드를 VC++ 컴파일러가 디코딩하는 차원의 문제이므로, 중요한 것은 빌드되고 난 뒤에 프로그램 내부에 문자열이 어떻게 인코딩되었는지 살펴보는 일이다. ▷ 빌드를 하고 난 뒤 윈도우 실행 파일(PE)의 내부 바이너리 데이터다. 문자열이 UTF-8이 아니라는 것을 쉽게 알 수 있다. 먼저, "hello한글"은 Windows의 로컬 환경인 C.. 2024. 12. 21. 이전 1 2 3 4 5 ··· 16 다음