반응형

C 14

Stack Size 조절

Stack Size 조절 Linux 시스템에서 프로그램을 개발할 때 local 변수와 global 변수 등을 사용해서 데이터 처리를 한다. 이 때 global 변수는 힙(heap) 영역에 할당되는 반면, local 변수는 스택(stack) 영역에 할당됩니다. Linux에서는 User 당 허용 가능한 stack size가 지정되어 있는데 기본적으로 8192K입니다. 이 정보는 ulimit -a 명령어로 확인 가능하면, 단위(unit)는 Kilo byte 입니다. 간혹 개발 작업을 진행하면서 memory access 시도도 아닌 곳 즉 함수 호출 등에서 segmentation fault를 겪어 보셨을 것입니다. 이 에러가 발생한 이유는 stack이 최대 허용 가능한 size까지 사용됨으로 인해서 함수 정보 ..

C, C++ 2019.04.23

-Wdeprecated-declarations 경고 없애기

gcc -Wall 로 컴파일 할 때 -Wdeprecated-declarations 경고가 발생하는 경우 1. 경고가 생기지 않는 함수를 사용 2. 경고를 표시하지 않도록 함 2-1. 커맨드 라인에서 지정(모든 함수에 적용) -Wno-deprecated-declarations 옵션 추가 2-2. #pragma 사용(이후의 모든 함수에 적용) 소스나 헤더에 다음을 추가 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 2-3 #pragma 사용2(해당 함수 사용 부분에만 적용) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" warning_func..

C, C++ 2019.01.23

리눅스 폴더 만들기(linux directory )

#include #include #include #include void MakeDirectory(char *pcFullPath);int main() { MakeDirectory( (char*)"/export/home/ering/tmp/MakeDir/00/01/"); return 0; } void MakeDirectory(char *pcFullPath) { char acTempBuf[256], *sp; strcpy(acTempBuf, pcFullPath); // 경로문자열을 복사 sp = acTempBuf; // 포인터를 문자열 처음으로 while((sp = strchr(sp, '/'))) // 디렉토리 구분자를 찾았으면 { if(sp > acTempBuf && *(sp - 1) != ':') // 루트..

C, C++ 2019.01.23

문자열 한글 포함 Hexa 코드로 변경

/*********************************************************************** * function : String2Hexa() * argument : pcSrc - Hexa Code 로 바꾸고자하는 원본 버퍼 pcRes - Hexa Code 로 변경된어 리턴받을 버퍼 **********************************************************************/ int String2Hexa(char *pcSrc, char *pcRes) { int i =0; static char acBuf[512]; char acTmp[32]; memset(acBuf, 0x00, sizeof(acBuf) ); for(i = 0; i < (..

C, C++ 2019.01.23

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

#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