프로그래밍 언어 31

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

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..

[개요] 파이썬 퀵 가이드(Quick Guide)

파이썬 개요:파이썬은 프로그래밍 언어, 인터프리터 방식, 대화적인언어이고 객체 지향 스크립트 언어이다.Python is Interpreted (인터프리터 방식)Python is Interactive (대화 형식)Python is Object-Oriented (객체 지향)Python is Beginner's Language (쉬운 언어)파이썬은 귀도 반 로섬(Guido van Rossum)이 1980년대 말부터 1990년대 초에 네덜란드 수학 & 컴퓨터과학 국가연구기관에서 개발하였다. 파이썬의 주요 특징은 아래와 같다. :Easy-to-learn (배우기 용이성)Easy-to-read (가독성)Easy-to-maintain (유지보수 편의성)A broad standard library (다양한 표준 라이브..

[개요] 자바 Annotation 이해

1. Annotation 정의 및 특징 Java 5부터 지원하는 기능 소스코드에서 비즈니스 로직에는 영향을 주지 않지만, 해당 타겟에 영향을 주거나 소스코드의 구조를 변경할 수 있음 소스코드에 메타데이터를 삽입하는 것이기 때문에 가독성 뿐만 아니라, 전체적인 소스코드 구성하는데 도움 Annotation 메타데이터를 프로그램 구성요소(클래스, 인터페이스, 메소드 등)과 연결 방법 제시 코드 라인 수를 줄이고, 선언으로 해결 함 Annotation은 @을 앞에 붙이고, 자바에서 기본적으로 제공하는 @Deprecated, @Override, @SuppressWarnings 등이 있고, 개발자가 직접 정의하여 사용할 수 있음 2. 사전 정의된 Annotation 사전 정의된 Annotation에는 자바언어에 의..

[개요] Java 직렬화(Serialization) 이해

자바 직렬화(Java Serialization)는 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다. 반대로 스트림에서 데이터를 읽어 객체로 변환하는 것을 역직렬화(deserialization)라 한다. 객체를 파일에 저장하거나 파일에서 꺼내오기 위해서 또는 객체를 네트워크를 통해 전송하기 위해서는 미리 객체를 직렬화(Serialization) 해야한다. 아래 예제는 SerializeDemo.java에서 Serializable한 Employee 클래스를 직렬화 하고, DeserializeDemo.java에서 역직렬화하는 예제이다. 1. java.io.Serializable interface를 상속받은 클래스를 생성한다. 아래에서 transient의 의미는 직렬화시에 제외시..