프로그래밍
-
함수에 주석 달기에 대한 생각프로그래밍/c++ 2016. 4. 24. 16:26
코딩을 하는데 함수 시그니쳐만으론 어떤 예외가 발생하는지 통 알 수가 없으니, std::exception으로 모든 예외를 잡는 상황이 종종 있었다. boost의 소스 코드는 발생하는 예외에 대해선 @throws [발생하는 예외의 종류] 같은 식으로 명시를 해놓았더라. 덕분에 어떤 예외가 발생하는지 파악하기 쉬웠다. 아쉬운 점이라면, 주석이 너무 빡빡하다는 점. 디테일한 설명을 하는 것도 장점도 있으니 이 부분은 취향 차이라고 본다. 나도 이 부분을 본받아서 주석을 달면 좋겠다는 생각을 했다. 이런식으로 주석을 작성하면, ide 단에서 함수의 설명은 다음과 같이 나온다. 그리고, ide 단에서 발생하는 예외에 대해서도 표시를 해줬으면 좋겠다. 지금 막 작성하는 코드에도 주석을 꼼꼼히 달면서 하긴 어려운데,..
-
함수 호출 규약 vectorcall프로그래밍/기록, 개념, 용어 2016. 4. 17. 02:33
글이 쓰여진 시점 visual studio 전용의 호출 규약으로(2013 이후 버전), 함수 인수가 가능한 한 레지스터에 전달되도록 지정하는 호출 규약. 비교적 최근에 추가 되었으며 레지스터를 최대한 활용하기 위한 호출 규약이다. 호출자가 오른쪽에서 왼쪽으로 스택에 푸시. x86에선 호출된 함수는 반환되기 전에 스택을 지운다지만, x64에선 호출자가 스택을 유지 관리한다고 다소 모호하게 설명 되어있다. 참고https://msdn.microsoft.com/ko-kr/library/windows/apps/dn375768(v=vs.120).aspxhttp://lunapiece.net/Article
-
친구와 각자의 집에서 tcp 연결을 하려는데 연결이 안 되던 문제프로그래밍/의문 2016. 4. 4. 14:03
4월 3일 일요일 밤, 우리는 서로의 컴퓨터에 연결을 하기로 했다.클라이언트는 유니티5로, 서버는 c++로 된 서버였다. 우리 둘은 멀리 떨어져있었고(적어도 같은 동네는 아니다.), 기현은 포트포워딩을 했기에 121.88.185.23:6001로 연결을 요청하면, 연결이 될 거라고 했지만 안 되었다.원인을 찾지 못해 접속 부분까지만 클라이언트를 빌드하고, 기현에게 넘겨줬다.기현은 외부 아이피를 네이버를 통해 확인했다고 하는데 그게 잘못된 건지 의심하고 있다.그리고 우린 일단 피곤해서 잠을 자러 감. --- 다음날 문제는 인증 서버(account)의 ip를(클라이언트 입장에서 최초 접속하는 서버) 외부 아이피로 해서 서버를 열었었는데,사실 내부 아이피로 서버를 열어야 했던 것이었다.그래야 포트포워딩이 되어 ..
-
클라이언트의 shutdown send는 서버에 eof를 전달한다.프로그래밍/의문 2016. 2. 6. 23:51
graceful close를 위한 과정 클라이언트 (0) 소켓의 송신 스트림을 닫음 shutdown(send)(4) 서버의 eof 인지(5) 소켓 닫음 서버 (1) 클라이언트로부터 eof를 인지. 클라이언트로 부터 받을 데이터가 없으므로 더이상 수신 받지 않는다. socket.shutdown(receive)(2) 남은 데이터들을 모두 보냄.(3) 클라이언트와 연결된 소켓의 송신 스트림을 닫음 socket.shutdown(send)(5) 소켓 닫음 따라서 서버는 클라이언트로 오는 eof가 소켓의 오류, 종료와 직접적으로 같은 건 아니다.사실, 서버는 클라이언트로 부터 eof를 받았다고 하더라도 서버는 송신을 할 수 있다. eof != disconnect
-
코드 안에 if~else 구문이 많다는 건 다른 성격의 것들을 한 데에 모아놨다는 것이다.프로그래밍/의문 2015. 11. 14. 09:48
매치를 만드는 클래스가 있었다. 유저의 레이팅에 따라 매치를 만들어주는 그런 정도는 아닌, 특정 모드를 원하는 유저가 n명이 될 때 매치를 만들어주는 그런 클래스였다. 그런데 매치를 등록하는 부분이 뭔가 이상해져가는 ㅡㅡ; 느낌이 들었다.다음은 그 문제의 코드이다. 1234567891011121314151617181920212223242526 switch (mode) { case soc::gamemode::v2: { v2users.push_back(info); if (v2users.size() == 4) { } } case soc::gamemode::v3: { v3users.push_back(info); if (v3users.size() == 6) { } break; } case soc::gamemode..
-
간결하고 깨끗한 코드 vs 높은 성능프로그래밍/의문 2015. 11. 11. 15:54
간결하고 깨끗한 코드 vs 높은 성능 C++의 강력함 중 하나는 매우 높은 성능의 코드를 작성하는 것이 가능하단 겁니다.그건 우리는 항상 성능에 대한 고민과 걱정을 해야 한다는 걸까요? 퍼포먼스를 위해 간결한 코드를 저버리고 복잡하고 지저분한 코드를 사용하는 게 옳은 걸까요?모두 기본적으로, 간단하고 깨끗한 코드를 쓰길 원합니다. 맞아요 그건 꽤 분명하죠. 퍼포먼스는 효율적인 것이 아니다. 우리는 효율과 퍼포먼스의 차이를 구분해봅시다. 무슨 차이점이 있을까요?그 길을 얼마나 빠르게 갈지 vs 얼마나 걸릴지로 예를 들어보죠.언뜻 보기에(at first glance), "그게 그거 아냐?" 할 수 있겠지만 조금 다릅니다.단적인 예로, 효율성은 당신이 A에서 B로 간다고 할 때 짧은 길로 가는걸 의미합니다.퍼..