일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- poetry
- 신혼여행
- 필리핀
- 시
- 안드로이드
- 영어
- 프로그래밍
- Programming
- Joe Satriani
- java
- english presentation
- English
- 회계
- 포인터
- 책
- 영화
- 문학
- english essay
- HONEYMOON
- C/C++
- 사랑
- network
- 보라카이
- STL
- generic algorithm
- 함수포인터
- radar
- 사진
- Android
- 돈
- Today
- 0
- Total
- 793,010
목록Engineering/C/C++ (25)
Humaneer.net
부동 소수점(float, double) 타잎의 배열이나 stl 컨테이너의 값을 sum할 때 유의사항. 루프를 돌면서 배열의 값을 다 더하는 것과 std::accumulate 의 결과가 다를경우가 발생할 수 있다. 아래 링크를 통해 결과 확인이 가능하다.https://ideone.com/oBJVX8 이것 때문에 디버깅 하느라 꽤나 애먹었음. -_-; 그 이유는 accumulate의 3번째 인자인 init value의 형(type) 때문.http://stackoverflow.com/questions/3604478/c-stdaccumulate-doesnt-give-the-expected-sum template을 이용한 코딩을 할 때는 3번째 인자인 init value에 0을 T로 타잎 캐스팅 하면 됨. sta..
struct stZero {}; int size = sizeof(struct stZero); C++ 컴파일러러로 컴파일을 한다고 했을 때, size의 값은 과연 얼마일까? ㅋㅋ 참고링크#1 : http://alones.kr/blog/750 참고링크#2 : http://minjang.egloos.com/2049827
브로드캐스트(Broadcast)와 관련된 모듈을 구현할 일이 있어 간만에 열혈강의 소켓 프로그래밍 책을 뒤졌다. 내용도 알차고 설명도 잘 되어있고, 실용적인 예제가 많은 좋은 책인 것 같다. 물론 IOCP나 Overapped IO같은 녀석들을 이용해 수백개 수천개의 클라이언트를 관리하는 서버 프로그래밍을 위해서는 좀더 심도 있는 책을 봐야겠지만, 뭐 기껏해야 20개 이내의 클라이언트가 연결될 서버에 거창한 테크닉따위는 필요없으니 .흐 그나저나 출판사가 바뀌었다. 예전엔 프리렉이었던 것 같은데. TCP/IP 소켓 프로그래밍(2010) 카테고리 컴퓨터/IT 지은이 윤성우 (오렌지미디어, 2009년) 상세보기 아무튼 아래의 코드는 열혈강의 TCP/IP 소켓프로그래밍의 예제 + 인터넷에서 좀 알아본 코드를 합쳐..
디버깅이 어려운 이유는 간단하다. 사람들은 자기가 보고자 하는 것만 보기때문이다. 아는 것만 보려하기 때문이다. 코드의 에러를 예측할 때는 자기가 아는 만큼 안에서 예측을 하게 된다. 고로 경험과 지식, 그리고 이 것들을 지혜로 흡수한 사람은 당연히 디버깅을 잘한다. 결론 : 무식이 죄다. ㅋ /* blah blah blah ... ... ... */ BYTE* buf = new BYTE(14); /* blah blah ... ... ... */ delete [] buf; 어제 런타임 에러가 난 버그가 포함된 코드이다. 분명히 delete [] buf; 이 구문에서 런타임 오류가 나는 걸 바로 잡아냈다. 처음엔 후~ 뻔하지 동적으로 할당한 메모리를 초과해서 내가 무슨 짓을 하였구나~. 그런데 난 절대로 ..
회사에 아는 선임분이 ARM 교육을 가셔서 부트 로더쪽 코딩으로 뭔가를 실습하는데, 잘 모르겠다고 메신저로 물어보시길 "C에서 특정 주소로 점프 하려면 우찌해야 하냐?" 참고로 부트로더의 역할을 내가 아는데로 간단하게 정리를 해보면 1. 뭔가를 한다 -_- (보통 시리얼 통신(rs-232,)을 통해 커널이미지를 정해진 주소에 다운로드 시키게 된다) 2. 특정 주소(커널 이미지의 시작점)로 점프를 한다. 3. 끝 -_- 역시 .. 내가 아는데로 정리하니 ... 간단하다 -_- . 다시 말해 모르는게 속편하다는 거 ㅋ 아무튼 질문을 받고 내가 처음에 바로 떠올린건 인라인 어셈블리였지만, '어셈은 안돼~' 라는 말에 함수포인터를 써보기로 하였다. 커널(커널함수)의 리턴이나 인자는 없다고 가정하였다. 쉽게 말해..
눈컴파일 및 실시간 두뇌 실행을 해봅시다. 거두절미 하고 아래의 소스는 과연 실행이 잘 될까? #include using namespace std; int main() { char str2[] = "abc"; str2[0] = 'A'; cout
왜 C++ 와 C 가 함께 쓰기가 어려울까요 ? C++야 C에서 나왔으니까 당연히 두 언어는 함께 섞어 써도 아무런 문제가 없어야 되는거 아냐 ? 라고 생각하실지도 모르겠습니다. 그렇지만 C++와 C 를 섞어 쓰는 게 생각만큼 그리 쉽진 않습니다. 개선된 C로서 C++ 특징 중 하나가 함수 재정의(function override) 가 가능하다는 것이고, 이것을 처리하기 위해서는 함수 심볼명을 코드에 나온 그대로 생성하는 게 아니라 컴파일러가 조정할 필요가 있게 됩니다. 이렇게 컴파일러가 함수 심볼명을 재정의하는 것을 name mangling 이라고 하는데요, 이것 때문에 C와 C++를 섞어 쓰는게 쉽지 않습니다. 어떻게 name mangling 이루어 지는지 아래 코드를 통해 눈으로 확인해 보겠습니다. ..
통신관련 프로그래밍을 하다보면, 여러 장치간의 프로토콜을 정해야할 때가 있다. 패킷의 헤더를 정해야 할 것이고, 그 밖에 여러가지 것들, 그리고 데이터까지. 그런데 데이터의 길이가 가변적이라면? typedef unsigned int u32; typedef unsigned char u8; #pragma pack(1) typedef struct _packet_example { u32 op; u8 source; u8 dest; u8* data; } PACKET_EXAMPLE; #pragma pack() 다음과 같이 정의를 할 수 있을 것이다. 자 이렇게 하였을 때 이 패킷의 사이즈는 얼마가 될까? 4 + 1 + 1 + 4 = 10바이트가 될 것이다. 하지만 아래와 같은 기법도 있다. #pragma pack(1..
#include int main() { FILE* stream; int i = 0, j = 0, count = 0, number = 0, total = 0; if ((stream = fopen("./num.txt", "r")) == NULL) return -1;// 파일열기 실패 for (i = 0; fscanf(stream, "%d", &count) > 0; i++) { total = 0; for (j = 0; j < count; j++) { if ((fscanf(stream, "%d", &number)) > 0) { printf("%d ", number); total += number; } else// 저장된 파일이 원하는 형태가 아님 return -1; } printf("\nAverage : %f\..
#include #include void routine(int number); void display_num(int number); void display_unit(int unit); char text[1000] ={ 0, }; // 여기에 최종결과를 저장함 int main() { routine(125000); printf("%s 원", text); return 0; } void routine(int number) { int unit = 10000; int result, temp; while (unit > 0 && number > 0) { result = number / unit; temp = number % unit; if (result == 0) { unit /= 10; continue; } else..