Language/C,C++
C에서 예외처리 하기
모두가 알고 있듯 C에서는 예외처리라는 것이 불가능하다고 알고있다. 예외처리가 C표준이 아니기 때문이다. 하지만 C 코드의 이식성을 무시해도 되는 상황이라면 C에서의 예외처리 방식은 매우 유용한 방법이 될 수 있다. __try{//////}__finally{/////} 이러한 방식을 적용하면 C에서 개발자들이 자주 놓치게 되는 메모리 해제에 대한 문제를 해결할 수 있다. int *ptr = NULL; __try{pi=(int*)malloc(sizeof(int));*pi = 5;}__finally{free(pi)} 위와 같은 방식으로 사용하면 free함수의 실행이 항상 보장된다. 참고문헌 : Understanding and Using C Pointers
[C언어] 동적할당한 메모리 크기 알기
C언어를 이용하여 코딩을 하다보면, 메모리를 동적할당하여 많이 사용하게 된다. 이 때, 동적할당 된 메모리 크기를 알고 싶은 경우가 있는데, 그 경우, 여러방법을 사용하는데, 그 중 가장 간편하게 제공되는 함수를 이용하면 편하다. malloc.h 를 포함한 다음, size_t _msize(void *p) 를 이용하여 크기를 구한다. 예제) int *a = (int*)malloc(sizeof(int)*40); printf("크기 %d\n", _msize((void*)a) / sizeof(int)); free(a);
파일 입출력
Colored By Color Scripter™1234567891011121314151617181920#include#include#include using namespace std; void main() { ifstream OpenFile("Test.java"); string ch; while(!OpenFile.eof()) { getline(OpenFile, ch); cout
구조체 메모리 패딩 문제
typedef struct Test { char a; short b; int c; }T T A; printf("%d", sizeof(A)); 어떤 값이 출력 될까? 32bit OS에서 가정하면 char 는 1Byte short 는 2Byte int 는 4Byte로 총 7이 출력될 것 인가? 하지만 출력 값은 8이다. 구조체에서는 메모리의 크기를 4Byte씩 나눠서 저장하게 됩니다. 위의 예제에서 char형과 short형을 합치면 3바이트이므로 4바이트를 맞추기 위해 1바이트가 추가 된다. 즉 (char(1) + short(2) + 1) + int(4) 로 총 8바이트 로 저장됩니다. 이것이 바로 메모리 패딩 입니다.
전처리기
전처리기란 프로그램에서 컴파일 전에 가장 먼저 처리되는 것이라고 보면 된다. 그 중 잘 알지 못하고 있는 것 들에 대해 설명한다. 1. #pragma once - 포함된 헤더 파일들이 여러개의 소스파일에 동시에 include 되어있을 시 중복되어 충돌할 경우가 발생할 수 있다. 그때 포함된 헤더 파일들이 한번씩만 빌드 되게 설정하는 것이다. 즉 중복을 방지한다. 2. #pragma comment(lib, "*.lib") - 외부 라이브러리 링크를 코드 내에 명시할 때 사용한다. Visual Studio와 같은 통합 개발 한경이 아니더라도, Open CV나 여러 라이브러리를 코드 내에서 링크 하여 사용 가능하도록 한다. 3. #define 내부의 # - #define 전처리기 지시자는 모두 잘 알고 있겠지..