일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 책
- 문학
- 회계
- english essay
- STL
- 사랑
- English
- 함수포인터
- HONEYMOON
- 돈
- 시
- 프로그래밍
- 영화
- Joe Satriani
- 필리핀
- C/C++
- generic algorithm
- java
- poetry
- 안드로이드
- 보라카이
- radar
- 신혼여행
- english presentation
- Android
- network
- 포인터
- 영어
- 사진
- Programming
- Today
- 16
- Total
- 794,026
목록C/C++ (26)
Humaneer.net
struct stZero {}; int size = sizeof(struct stZero); C++ 컴파일러러로 컴파일을 한다고 했을 때, size의 값은 과연 얼마일까? ㅋㅋ 참고링크#1 : http://alones.kr/blog/750 참고링크#2 : http://minjang.egloos.com/2049827
디버깅이 어려운 이유는 간단하다. 사람들은 자기가 보고자 하는 것만 보기때문이다. 아는 것만 보려하기 때문이다. 코드의 에러를 예측할 때는 자기가 아는 만큼 안에서 예측을 하게 된다. 고로 경험과 지식, 그리고 이 것들을 지혜로 흡수한 사람은 당연히 디버깅을 잘한다. 결론 : 무식이 죄다. ㅋ /* blah blah blah ... ... ... */ BYTE* buf = new BYTE(14); /* blah blah ... ... ... */ delete [] buf; 어제 런타임 에러가 난 버그가 포함된 코드이다. 분명히 delete [] buf; 이 구문에서 런타임 오류가 나는 걸 바로 잡아냈다. 처음엔 후~ 뻔하지 동적으로 할당한 메모리를 초과해서 내가 무슨 짓을 하였구나~. 그런데 난 절대로 ..
회사에 아는 선임분이 ARM 교육을 가셔서 부트 로더쪽 코딩으로 뭔가를 실습하는데, 잘 모르겠다고 메신저로 물어보시길 "C에서 특정 주소로 점프 하려면 우찌해야 하냐?" 참고로 부트로더의 역할을 내가 아는데로 간단하게 정리를 해보면 1. 뭔가를 한다 -_- (보통 시리얼 통신(rs-232,)을 통해 커널이미지를 정해진 주소에 다운로드 시키게 된다) 2. 특정 주소(커널 이미지의 시작점)로 점프를 한다. 3. 끝 -_- 역시 .. 내가 아는데로 정리하니 ... 간단하다 -_- . 다시 말해 모르는게 속편하다는 거 ㅋ 아무튼 질문을 받고 내가 처음에 바로 떠올린건 인라인 어셈블리였지만, '어셈은 안돼~' 라는 말에 함수포인터를 써보기로 하였다. 커널(커널함수)의 리턴이나 인자는 없다고 가정하였다. 쉽게 말해..
pgr을 돌아다니다가, 아래의 글을 발견하였다. http://www.pgr21.com/zboard4/zboard.php?id=bug&page=1&sn1=&divpage=11&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=60132 질문자가 남긴 코드는 다음과 같다. #include #include #include #include using namespace std; void main(void) { int iv[10] = {1,2,3,4,5,6,7,5,4,12}; vectorvec(iv,iv+5); vectornvec; vector::iterator iter=vec.begin(); const int val=5; while((iter=find_if(iter,..
눈컴파일 및 실시간 두뇌 실행을 해봅시다. 거두절미 하고 아래의 소스는 과연 실행이 잘 될까? #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..