템플릿 특수화와 const
아래 코드는 "C++기초 플러스5판(성안당)"에 있는 프로그래밍 연습문제를 풀다가 작성한 코드입니다. template T maxn( const T list[], int n); templatechar* maxn(const char * list[], int n); 위코드를 컴파일 하면 "템플릿 선언과 매칭되는 것이 없다"는 내용의 에러가 납니다.. 왜 그럴까요? 저는 구글링을 하면서 답을 구했는데요.. 잘 생각해 보세요^^ 아시는 분들은 댓글 남겨 주세요~~
2011.04.02
[const reference와 임시객체]
대뜸 질문입니다... 다음 코드에서 문제가 되는 부분을 설명 해 보세요^^ #include using namespace std; double refcube(const double &ra) { return ra * ra * ra; } void swapr(int &a, int &b) { int temp; temp = 1; a = b; b = temp; } int main() { double side = 3.0; long edge = 5L; double c1 = refcube(edge); double c2 = refcube(7.0); double c3 = refcube(side + 10.0); long a = 3L; long b = 5L; swapr(a, b); return 0; } C++ 기초 플러스 5판(..
2011.03.30
[강석민 강사님 객체지향 디자인 패턴 + Generic 디자인 기법 교육1탄] 디자인을 이해 하려면 알아야 하는 문법1 - Up casting
거의 2년만에 강석민 강사님의 강의를 다시 듣게 되었습니다. 역시 설명을 참 잘하신다는 느낌을 받았습니다~ 그럼... 갈길이 멀기 때문에 바로 정리작업을 들어가겠습니다.(이미 내머리속에 지우개가 발동하고 있습니다..ㅠ) 첫번째 시간에는 객체지향 디자인을 하기 전에 기본적인 c++의 문법을 배웠습니다. Up casting : "부모 포인터(참조)로 자식객체의 주소를 담을 수 있다" 라는 개념입니다. 장점1. 동종(동일부모의 자식)을 저장하는 collection을 만들 수 있다. 장점2. 동종을 처리하는 함수를 만들 수 있다. 즉, 자식 클래스가 무엇인지 몰라도 동일한 일을 하기 위해서 부모클래스를 가지고 일을 할 수 있다는 말입니다. 나중에 다형성개념이 있을 수 있는 것이 Upcasting이 가능하기 때문..
2010.06.01
[C++이야기] Pointers and Contants
우리가 보통 포인터를 사용할때는 두가지가 관계가 있다. 하나는, 포인터 자신이고, 다른 하나는 포인팅 되는 오브젝트 이다. 그럼 포인터에 const키워드를 붙이면 어느 것이 상수화 될까? 답은 const키 워드를 붙이는 위치에 따라서 결정되는 것이다. 기준은 * 이다. *앞에 const키워드를 붙이면(prefixing) 포인팅 되는 오브젝트가 상수화 되는 것이고, * 뒤에 const키워드를 붙이면(postfixing) 포인터가 상수화 되는 것이다. 예를 들어보도록 한다. void f1(char* p){ char s[] = "Gorm"; const char* pc = s; //pointer to constant pc[3] = 'g'; // error: pc points to constant pc = p; ..
2010.01.03
[C컴파일러]이상한 컴파일러...
오늘 과제를 열심히 하다가 다른 소스에서는 잘 되는데 내가 만든 소스에서는 계속 컴파일 에러가 나는 구문이 있었습니다. void function( char *path ) { static char *full = path; } 어떤 함수에 스태틱 캐릭터 포인터가 있고 함수의 인자로 오는 캐릭터 포인저의 값을 저장하는 구문인데요.. "initializer is not a constant" 위와 같은 에러 메시지가 뜨더군요.. 에러문을 해석하면 스태틱 포인터에 초기화될때 들어가는 값이 상수가 아니라서 안된 다..이런 의미인데 이런 문법적 제약이 있는것은 아닌것으로 알고 있는데다가 다른 소스에서는 컴파일이 잘되니 도무지 알 수 없는 노릇이라 인터넷을 뒤저 보았습니다. 다른 사람들도 저와 같은 현상이 일어나는 것을..
2009.01.13
Naked Function
Naked Function 원본 : http://danguria.springnote.com/pages/2407072 작성자 : danguria 이 글을 마음껏 이용하시되 출처를 꼭 밝혀 주세요 요즘 루트킷 관련 과제를 하다보니 C코드를 많이 보고 있습니다.. 대부분 커널모드에서 동작하는 코드들인데 IDT후킹관련 코드를 보는데 "__declspec(naked) Function()" 이런식의 함수가 보이는 것입니다. 분명히 이건 표준C에내용은 아닌것 같은데.. 뭐지.. 하면서 그냥 지나 치다가 우연히 "Windows 구조와 원리 그리고 Codes"라는 책에서 그 설명을 볼 수 가 있었습니다. 결론 부터 간단히 말하자면!! 위와 같은(__declspec(naked)) prefix를 붙이게 되면, 컴파일러가 스..
2008.12.30
Struct Packing!!
요새 C언어로 코드를 짜다 보니까 자잘자잘한 컴파일러 옵션이나 문법을 알게 된다. 전에는 몰랐던 구조체의 메모리 할당에 대해서 잘 알게 되었다. 컴파일러가 구조체의 메모리를 할당할때 가장 큰 타입의 메모리 곱하기 변수 개수를 한다는 것이다. struct AAA { int a; char b[2]; int c; }; 이렇게 하면 할당되는 메모리는 10byte일 것같지만 실제로 12byte가 된다. 속도를 좀더 올리려는 목적에서 그런다고 한다. 그리고 남는 2byte는 b의 뒤에 빈공간이 있다. 하지만 특별한 상황에는 실제 메모리를 정확하게 잡아야 할때가 있기 때문에 #pragma pack( ... )으로 해결 할 수 있다. #pragma pack( push ) #pragma pack( 1 ) // 구조체 선..
2008.08.01