성우형 목소리너무좋아요
운영체제 |
모델 |
char |
short |
int |
long |
ptr |
windows |
LLP64 |
1바이트 |
2바이트 |
4바이트 |
4바이트 |
8바이트 |
UNIX |
LP64 |
1바이트 |
2바이트 |
4바이트 |
8바이트 |
8바이트 |
압도적감사
64비트와 32비트 공존의 문제점
절대 기본자료형으로 포인터를 캐스팅하지말자
1 2 | int arr[10] = { 0 }; int arrVal = (int)arr; | cs |
물론 32비트에서도 좋은건 아니다
Windows 스타일 자료형
반드시 외울 필요는 읍다
Polymorphic 자료형
1 2 3 4 5 6 7 8 9 10 11 | #if defined(_WIN64) typedef __int64 LONG_PTR; typedef unsigned __int64 ULONG_PTR; typedef __int64 INT_PTR; typedef unsigned __int64 UINT_PTR; #else typedef long LONG_PTR; typedef unsigned long ULONG_PTR; typedef int INT_PTR; typedef unsigned int UINT_PTR; #endif | cs |
왜 UINT_PTR인데 *가 읍냐?
-> 포인터 연산을 할 때, 포인터 값으로 무언가 연산을 해야할 때 사용하라고 _PTR을 붙였다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 | UINT CalDistance(UINT a, UINT b) { return a - b; } int _tmain(void) { INT val1 = 10; INT val2 = 20; _tprintf(_T("position &d, %d \n"), (UINT)&val1, (UINT)&val2); _tprintf(_T("distanc : &d \n"), CalDistance((UINT)&val1, (INT)&val2)); return 0; } | cs |
1 2 3 4 5 | #if defined(_WIN64) typedef unsigned __int64 UINT_PTR; #else typedef unsigned int UINT_PTR; #endif | cs |
오류의 확인
GetLastError 함수와 에러코드
윈도우즈 프로그래밍에선 에러 로그를 저장하기 위에 전역 공간에(아마 데이터 공간?) 로그를 저장시키는데 이 에러 로그에 접근하는 함수가 바로 GetLastError 함수다.
MSDN 홈페이지에 에러 코드별로 다 설명이 되어있으니 필요하면 참고
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int _tmain(void) { HANDLE hFile = CreateFile( //Windows system 함수, _T("ABC.DAT"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) { _tprintf(_T("error code: %d \n"), GetLastError()); return 0; } return 0; }; | cs |
실행 결과
1 error code: 2
여기서 ABC.DAT이란 파일은 없다. 걍 없는 파일을 불러오려고 했을 때 어떤 오류가 나오는지 확인하는 것
INVALID_HANDLE_VALUE는 에러가 발생했는지를 체크하는 함수가 아니라, 에러가 있을때 그 에러가 있음을 알려주는 함수다.
또한, CreateFile 함수 호출 후 바로 GetLastError 함수가 호출되었는데, 이렇듯 GetLastError는 LastError이기때문에 특정 함수 호출 후 바로 GetLastError함수를 호출해야 그 기능을 온전히 할 수 있다.
'운영체제 > 윈도우 시스템' 카테고리의 다른 글
프로세스, 스케줄러 (0) | 2019.09.25 |
---|---|
컴퓨터를 디자인하자 (0) | 2019.09.23 |
문자셋 SBCS, MBCS, WBCS (0) | 2019.09.19 |
Stored Program Concept (0) | 2019.09.18 |
힙 단편화, Windows Low Fragmentation Heap(LFH) (0) | 2019.09.18 |