반응형

C, C++ 19

포인트 함수 < 포인트로 함수를 호출하는 방법>

#include #include #include typedef int (*msgFuncPtr) (void *param1); int Sum(void* ptMsg);typedef struct _FUNC_PTR { msgFuncPtr func; }Func_ptr;typedef struct _TMEP { int a; int b; }Temp;int main() { Func_ptr stFuncPtr; Temp* ptTemp = new Temp; ptTemp->a = 2; ptTemp->b = 3; stFuncPtr.func = Sum; // 호출할 함수가 Sum이라는 것을 설정 stFuncPtr.func(ptTemp); // Sum 함수를 호출하는 부분 return 0; }int Sum(void* ptMsg) { ..

C, C++ 2019.01.23

define, macro

매크로를 만들 때만 사용할 수 있는 지시어가 있는데, 바로 ##과 \이다. ##은 함수와 같은 매크로에서만 사용하는 것으로 두가지 인수를 연결시켜 버리는 기능을 한다. 예를 들어#define MACRO(a, b) a##b이렇게 매크로를 만들었다고 하자. 프로그램에서 이 매크로를 a = MACRO(First, Last);이렇게 사용했다면 실제로는 두 인수 First와 Last가 연결되어 a = FirstLast;이렇게 되는 것이다. \는 매크로의 내용이 너무 길 때 여러줄에 쓰기 위해 필요한 것이다. 줄 맨 끝에 \를 붙여 주면 그 아래 줄에 계속 연결하여 쓸 수 있게 된다.예를 들어#define MACRO(a, b, c) a = b + c; printf("%d\n", a); a = b - c; print..

C, C++ 2019.01.23

inet_addr, inet_ntoa

#include #include #include #include #include #include #include int main() { struct sockaddr_in sockAddr_in; sockAddr_in.sin_addr.s_addr = inet_addr("0.0.0.0"); // 문자를 주소형태로 변환해서 넣어준다 // printf("%s\n",inet_ntoa(sockAddr_in.sin_addr)); // 주소형태를 문자로 변화 해서 출력 // return 0; } inet_addr() 함수는 수-점 표기인 인터넷 호스트 주소 cp를 네트웍 바 이 트 순 서인이진 데이터로 바꾼다. 만일 입력이 유효하지 않다면, INADDR_NONE ( 보통 -1)이 반환된다. 이 함수는 위에서 언급한 in..

C, C++ 2019.01.23

static_cast, const_cast, reinterpret_cast

static_cast 일반적으로 C/C++ 언어에서는 지정한 데이터형으로 강제 형변환(casting)이 가능하다.하지만 강제 형변환을 할 경우 원하지 않는 결과가 발생할 수 있으므로, 이런 문제를 미연에 방지하기 위해static_cast를 사용하며, static_cast는 의미 없는 포인터의 형변환을 막아 준다. 사용 예는 다음과 같다. #include #include class T1 { public: virtual void print1() { puts( "t1p1" ); } }; class T2 : public T1 { public: virtual void print1() { puts( "t2p1" ); } virtual void print2() { puts( "t2p2" ); } }; void mai..

C, C++ 2019.01.23

더블 포인터란 무엇인가? (double point)

더블 포인터란 무엇인가? 말 그대로 포인터연산자인 * 표시가 2개 붙어 있는 것이다. 예를 들어 int **ptr; 이정도로 해두면 될것이다. 더블 포인터와 싱글 포인터 차이점...........?? 싱글포인터는 해당 변수의 주소값을 지니고 있다. 또한 싱글 포인터 역시 포인터 변수이다. 그러므로 이 싱글 포인터 변수 역시 4byte의 메모리 공간을 할당받는다. 이 실글 포인터가 할달 받은 공간을 가르키는것이 더블 포인터이다. 즉 싱글 포인터의 주소값을 가지고 있는 것이다. 예를 들어int val=1;int *ptr1 = &val; -> 싱글 포인터int **ptr2 = &ptr1; -> 더블 포인터:: ptr1은 val의 주소값을 지니고 있고 ptr2는 ptr1의 주소값을 지니고 있는 것이다. ptr2..

C, C++ 2019.01.23

포인터와 const

포인터와 const 키워드포인터를 const키워드로 상수화 시킨다는 것은 2가지 의미를 가진다.1.포인터가 가르키는 변수의 상수화 ex1) int a =10; const int *p = &a; *p =30; //error a = 30; //ok 위의 예제를 보면 const키워드의 위치가 int 앞에 나와있다. 이는 *p가 a라는 변수를 상수화한다는 의미를 나타낸다. p라는 포인터가 봤을때 변수 a가 상수처럼 보인다는 뜻이다. 위 코드를 보면 *p =30; 는 error 메세지가 나오고 a = 30 는 통과된다. 이는 변수 a가 지니는 값을 상수화 한다는 것이 아니라 위에 말한 변수 a를 상수화 하기 때문에 그렇다. 즉 a값을 변경하는 것을 막는 것이 아니라 포인터를 통해 접근 하였을 때만 막는것이다.2...

C, C++ 2019.01.23

gcc의 undefined reference to '__gxx_personality_v0' 에러

gcc로 C++ 파일을 컴파일하면 "undefined reference to '__gxx_personality_v0'"라는 에러가 발생하는데 이는 gcc가 C++용 컴파일러가 아니라 gcc(Gnu C Compiler)의 약자가 말해 주듯이 C 언어용 컴파일러이기 때문에 발생하는 에러이다. gcc 대신 g++ 를 사용하면 문제를 해결할 수 있다. ----------------------------------------------------------------------------------- ex) cc a.cpp

C, C++ 2019.01.22