C&C++(19)
-
[C/C++] 라이브러리
라이브러리: 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일 - 정적 라이브러리(Static Linked Library, SLL): 실행파일 안에 라이브러리를 하나로 묶인다는 특징. 정적 라이브러리 파일(*.lib)을 만들고, 이 파일을 사용하는 측에서 헤더파일과, #pragma comment 혹은 프로젝트 속성 창의 링커-입력-추가종속성에서 라이브러리 경로를 입력하면 된다. 실행 파일을 만들 때 링커가 .lib 파일과 컴파일된 *.obj 파일을 링크하여 실행파일을 만들어낸다. -동적 라이브러리(Dynamic Linked Library, DLL): 실행파일 안에 포함되지 않고, 프로그램 실행 시에 참조된다. 따라서 실행 파일의 크기를 상대적으로 작게 만들고,..
2023.05.10 -
[C++] 모던 C++(C++11) 기초
1. auto 키워드 : 타입을 추론(type deduction)하는 역할을 한다. 기본 auto는 const, &(참조) 를 무시하기때문에 조심해야한다. 가독성이 나빠지기 때문에, 타이핑이 지나치게 길어지는 경우에만 사용한다. 2. 중괄호 초기화 stl vector와 같은 Container에서 유용하게 사용할 수 있다. 축소 변환을 방지한다. (int > double 불가능) 만든 클래스에서 중괄호 초기화를 통한 생성자를 받아주고 싶다면, initialize_list를 인자로 하는 생성자를 정의해야 한다. 이 때, 다른 생성자보다 initialize_list 생성자가 우선순위가 더 높으므로, 다른 생성자가 무시될 수 있다. (주의!) 3. nullptr 그저 0의 의미를 갖는 NULL과 다르게, nul..
2023.05.09 -
[C&C++] const 키워드
const는 변수를 상수화시켜주는 키워드이다. (msdn왈, const 변수의 값이 상수임을 지정하고 프로그래머가 수정하지 못하도록 컴파일러에 지시하는 키워드) 그렇다면, const 변수가 선언된 메모리를 참조해서 값을 바꾸면 어떻게 될까? int main() { const int a = 5;//a const로 선언 int b = 4;//b 변수 선언 int* c = &b; c= c-2;//포인터 c로 a의 메모리 영역을 가리키게 한다. *c = 2;//a의 메모리 공간을 2로 바꾼다. printf("%d\n", a);//a값을 출력한다. printf("%d\n", *c);//c 포인터가 가리키는 값을 출력한다. return 0; } 이 코드를 실행하면, 실제로 메모리 공간이 바뀐다. 그러나, 컴파일러에..
2023.04.25 -
[C/C++] 소켓 API
소켓 API 정리 SOCKET socket(int af, int type, int protocol) : 소켓 생성 인자: af: AF_INET(IPv4), type: SOCK_STREAM(TCP), SOCK_DGRAM(UDP), protocol: 0(TCP,UDP) 반환: 소켓 생성 int closesocket(SOCKET s) : 소켓 닫기 인자: s: 닫을 소켓 반환: 성공: 0, 실패: SOCKET_ERROR int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData) : Winsock DLL 사용 시작 인자: wVersionRequested(버전.MAKEWORD(2,2)), lpWSAData(WSADATA 변수의 주소) 반환: 성공:0, 실패:오류코드..
2023.04.06 -
[C++] 간단한 디자인패턴
1. 싱글톤 프로그램 내에서 유일하게 하나만 존재해야 하는 클래스에 적용한다. 일반 전역 객체는 하나만 만들게 제한되지 않고, 객체를 사용하기 전에도 프로세스 가동 시점에 생성이 되는데, 싱글톤 객체를 통해서 이를 해결할 수 있다. 구현 방법 1) GetInstance 라는 public 함수에 static 지역변수를 두는 방법. - 지역 static으로 인한 성능 저하 2) 클래스 멤버 변수에 static 변수로 자기 자신을 두는 방법 - 프로세스 가동 시점에 생성이 됨. (참고로 static 멤버 변수의 경우 cpp에서 따로 선언을 해줘야 한다.) 3) GetInstance 에서 동적할당을 하는 방법. (NULL 플래그로) - 멀티쓰레드에서 락을 걸어야 한다는 점. (NULL이 아닌 상태에서 동시에 들..
2022.01.07 -
[C++] 템플릿
클래스나 함수에 템플릿을 이용하여 여러 자료형에 대해서 동일한 작동을 하게 만들 수 있다. 보통 자료구조에서 잘 사용된다. 컴파일 과정에서 Call이 일어난 해당 템플릿 타입에 대한 함수가 실제로 생성된다. 따라서 헤더파일과 cpp파일로 선언 / 정의를 나눌 수 없다. 또한 템플릿 코드 블럭 내에서는 실제 함수가 아니기 때문에 인텔리센스가 작동하지 않는다. 템플릿 선언시, template 이런식으로 매개변수처럼 활용할 수도 있다.
2022.01.07