C

    JNI(Java Native Interface)

    JNI(Java Native Interface)

    프로젝트를 진행하면서 JNI에 대해 알게 되었었다. Java에서 C함수를 호출하거나 C에서 Java의 메소드를 호출할 때 사용하는 것인데, 안드로이드 공부를 하다가 조금 더 파고들게 되었다. * 안드로이드는 자바로 프로그래밍을 하는데 왜 JNI에 대해 알아야 할까? 우선 안드로이드 플랫폼은 순수하게 Java로만 구성되어진 것이 아닌 Java 레이어와 C/C++레이어가 서로 상호 작용하면서 동작한다. 이 두 레이어가 유기적으로 동작하게 만들려면 JNI에 대해 알아야 한다. 그리고 일반적으로 Java는 C/C++에 비해 느리다. 성능이 중요할 경우 C/C++로 작성하고 이를 JNI를 통해 Java에서 호출할 수 있다. * NDK(Native Development Kit) 안드로이드 애플리케이션에서 사용할 네..

    C와 Java의 컴파일 과정

    C와 Java의 컴파일 과정

    C와 Java의 컴파일 과정에 대해서 찾아보는 중에 좋은 책을 찾았다. 국내 웹에는 C의 컴파일 과정에 대한 내용밖에 없었다. Reverse Engineering Software[1]라는 책인데 2장에 컴파일 과정에 대한 내용이 나와 있었다. 1. C Compile 아래는 C의 컴파일 과정이다. Figure 1. 컴파일 과정(출처 : [1]) 1.1 Preprocessor C는 다른 언어의 컴파일러와 다르게 전처리 과정이 들어간다. 전처리([3] 참조)는 컴파일에 앞서 필요한 처리를 해주는 것이다. 전처리문에는 다음과 같은 것들이 있다. Table 1. 전처리문의 종류 전처리문 기능 #include 디스크상의 파일을 편입 #define 매크로를 정의 #undef 정의되어 있는 매크로를 취소 #if~#dn..

    [VC++] 더블 링크드 리스트

    /* * Author : Chang-Hwan Han * Date : 2010. * Description : double linked list */ #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct node { char* szName; struct node* prevNode; struct node* nextNode; }Node; Node* __insertNode(Node *pNode); Node* __deleteNode(Node *pNode); void __printNode(Node *pNode); void __freeNode(Node *pNode); void __freeNodeAll(Node *pNode); void mai..

    [VC++] 이중 포인터에 이차원 배열 형태의 문자열 할당하기.

    /* * Author : Chang-Hwan Han * Date : 2010.10.26 * Description : using a double pointer instead of an two-D array */ #include "stdio.h" #include "stdlib.h" #include "string.h" void __printVar_pointer(char **pszVar, int nMaxCount); void __printVar_array(char (*pszVar)[20], int nMaxCount); void main() { int nCount = 3, i =0; char **szPointer = NULL; char szArray[3][20] = {"pointer", "array", "stac..

    [VC++] 구조체 패킹과 패딩 비트

    구조체 패킹 및 패딩 비트에 대해서 잠깐 애기하려고 한다. VC6에서 테스트를 해보았고, 2005버전 이하는 4바이트 패킹을 하고 2008부터는 8바이트 패킹을 한다고 들었는데 VC6에서 무조건 4바이트 패킹을 하지 않았다. struct var { char a; }; 이 구조체의 크기는 얼마일까? 1Byte이다. struct var { char a[2]; char b; }; 이 구조체의 크기는 얼마일까? 3Byte이다. struct var { short a; char b; }; 이 구조체의 크기는 얼마일까? 4Byte이다. struct var { int a; char b; }; 이 구조체의 크기는 얼마일까? 8Byte이다. struct var { double a; char b; }; 이 구조체의 크기는 ..

    C 기본 형태

    #include int function(int a, int b); int main(){ printf("5 + 3 : %d \n", function(5,3)); return 0; } int function(int a, int b){ return a+b; }