프로그래밍 언어/C_C++ 6

[예제] 매크로를 이용한 디버깅 예제

C에서 로그 레벨에 따라 디버깅 관련 출력을 할 수 있도록 매크로를 활용하는 예제임 파일명 : dbg.c #include #define APPDBG(LEVEL,ARGS) \ if (_DBGLEVEL >= LEVEL) \ { printf("[%s][%06d] DEBUG : ",__FILE__, __LINE__); \ printf ARGS; }//---------------------------------------------------------------main(){int current_dbg = 50; APPDBG(50 , ("debug 50\n"));APPDBG(100, ("debug 100\n"));}

[예제] 가변적인 인자 로깅하는 예제 - stdarg.h 함수 이용

아래 예제는 C 프로그램에서 디버깅을 위한 로깅 출력 시에 인자(argument) 수를 가변적인 수로 넘겨, 로깅을 출력하는 예제임 파일명 : log.c #include #include applog(char *fmt, ...) {charmsg[1024];va_list args; va_start(args, fmt); strcpy(msg,"Hello"); (void) vsprintf(msg, fmt, args);va_end(args); printf("%s\n", msg);}-------------------------------------------------main() {applog("%d %ld %s", 1, 1000, "abc");}

[개요] C 표준 사전 정의된 매크로

C 언어에서 미리 정의된 매크로(Predefined Macro)는 아래와 같다. __FILE__ : 소스 파일의 절대 경로 값__LINE__ : 소스 라인 번호__DATE__ : 컴파일될 때의 날짜__TIME__ : 컴파일될 때의 시간__STDC__ : 컴파일러가 ANSI C (ISO) 표준을 따르면 1, 아니면 0임__STDC_VERSION__ : C 표준 버전, yyyymm 포맷의 long integer 값 #include int main(){ printf("FILE : %s\n", __FILE__); printf("LINE : %d\n", __LINE__); printf("LINE : %s\n", __DATE__); printf("LINE : %s\n", __TIME__); printf("LINE ..

[개요] gcc 컴파일러 옵션

gcc는 내부적으로 아래 명령어를 호출하여 컴파일한다. gcc 옵션 설명이지만, 엄밀히 말하면 아래 단계별 명령어의 옵션이라 볼 수 있다.전처리기 : cpp0 또는 cc1 -EC 컴파일러 : cc1어셈블러 : as링커 : collect2 * GCC 옵션 - 기본 -o -c -E -S -v 특정 파일명으로 실행 파일 생성. 설정하지 않으면 a.out 생성 됨 오브젝트 파일(.o) 생성 컴파일 대신에 전처리 결과를 stdout으로 출력함 어셈블리 파일만 생성하고 컴파일 종료(.s 파일 생성됨) verbose 모드. 컴파일의 상세한 결과를 출력함 [참고] -save-temps 옵션은 .i, .s, .o 확장자를 가진 중간 파일을 지우지 않고 놓아둠 * GCC 옵션 - 헤더 및 매크로 -I -D [매크로] He..

[예제] IPC - Shared Memory 사용 예제

1. 공유 메모리(Share Memory) 개념프로세스들간의 데이터를 공유하거나, 데이터를 전달할 때 이용되는 IPC(Inter-Process Communication) 자원이다. 2. 공유 메모리(Share Memory) 관련 주요 함수 1) 헤더 파일#include #include #include 2) 주요 함수 목록 shmget() 공유 메모리 생성 함수int shmget(key_t key, size_t size, int shmflg)* key : Shared Memory key (유일해야 함)* size : Shared Memory 크기* shmflg - IPC_CREAT : 기존 key에 해당하는 공유메모리가 없으면 신규로 생성하고, | 연산자를 붙여 접근권한을 준다.(아래 예제 참조) - IP..

[Tips] POSIX와 표준 C라이브러리

JAVA 언어는 SUN(현재 ORACLE)에서 개발한 후, 버전 관리를 통합적으로 하고 있으르모, 표준 API에 대해 정리가 잘 되어있다. 최신 버전은 Java 8 버전이다. 이에 반해 C언어 및 C API는 유닉스/리눅스 플랫폼 간에 표준이 JAVA 언어에 비해 상대적으로 덜 정립된 느낌이다. C언어 표준 관련해서는 POSIX, ANSI/ISO 등이 있다.C언어 표준인 POSIX와 ANSI/ISO에 대해 비교하고자 한다. POSIX는 Portable Operating System Interface for UniX의 약어이다. POSIX는 다양한 UNIX와 LINUX를 위해 표준화된 API를 제공한다. POSIX는 스레드(Thread), 세마포어(Semaphore), 파일 시스템 접근 API 등 많은 A..