반응형

전체 글 103

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

리눅스 signal(linux signal)

대부분의 운영체제는 signal을 지원하며, 마찬가지로 Linux도 signal을 지원한다. 시그널은 인간이나 동물이 사용하는 그것과 매우 유사하다. 즉 의미와 정보가 1:1로 매칭되기 때문에, 재해석할 필요없이 즉시 의미를 알아낼 수 있도록 되어 있다. 리눅스 운영체제는 미리 약속되어 있는 수십가지의 signal을 제공하는데, kill(1)을 이용하면 리눅스가 지원하는 signal의 종류를 알아낼 수 있다. # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15)..

LINUX 2019.01.22

linux 심볼릭 링크(symbolic link)

POSIX 호환 운영 체제에서 심볼릭 링크는 symlink 시스템 호출을 사용하여 만든다. ln이라는 셸 명령은 보통 하드 링크를 만들어내는 link라는 시스템 호출을 사용한다. ln -s 플래그가 지정되면 symlink() 시스템 호출이 대신 사용되면서 심볼릭 링크를 만들어낸다. 심링크는 U.C. 버클리의 4.2BSD 유닉스에 도입되었다. 다음의 명령은 명령 줄 인터페이스 (셸)에서 심볼릭 링크를 만들어낸다:ln -s [대상 경로] [링크 경로] 대상 경로는 심볼릭 링크가 가리키는 상대 경로나 절대 경로이다. 일반적으로 대상은 존재하지만 심볼릭 링크는 존재하지 않는 대상을 가리키는데 사용할 수도 있다. 링크 경로는 심볼릭 링크의 경로이다. 심볼릭 링크를 만들면 이 링크는 대상에 대한 별명(alias)으..

LINUX 2019.01.22