반응형

전체보기 81

[C] 선언한 배열의 index 이상을 접근하면 어떻게 될까?

길이가 10인 1차원 배열이 있다고 하겠습니다. 그럼 index의 범위는 0 - 9 입니다. 만약 이를 초과한 10에 접근하면 어떻게 될까요? 우리의 컴파일러는 친절하게도 문제가 있다는것을 밑줄로 알려줍니다. (Debug Mode에서는 프로그램을 실행하면 메모리 접근 에러가 납니다. 정말 친절해서 너무나 고마운나머지 Test는 Release Mode에서 진행했습니다. ) 그런데 에러가 아닌 경고가 메시지가 발생합니다. 컴파일도 아주 잘 되죠. 동작시키면 쓰레기 값이 나오지만요 ^^ 그럼 배열범위를 벗어난 메모리 값을 초기화를 해버리면 어떻게 될까요?? 결과는 에러없이 아주 잘 동작합니다. 경고는 존재하지만요. 이를통해 알 수 있는것! 1. 배열의 크기를 10으로 지정한다고 해서 10만 쓸수 있는것은 아니..

[C] Typedef 손쉽게 이해하기.

C언어에서 Typedef 는 자료형을 재정의 할 수 있도록 하는 아주 유용한 키워드입니다. typedef (자료형이름) (재정의할 자료형 이름) 로 되어있는 아주 쉬운 구조이죠. 사용방법을 간략하게 예를들면 아래와 같습니다. typedef int INT32; //int를 INT32로 재정의해서 사용할거에요! INT32 a = 1000; // int a = 1000 이랑 같은 뜻! 사실 위와같은 케이스에 대해 이해하는건 정말 쉽습니다. 그런데 이에 대하여 처음 접하거나 익숙하지 않은 경우 간혹 헷갈리는것들이 있습니다. typedef void (*fun)(int,int); //함수포인터 자료형! typedef int (*arr)[10]; //포인터 배열 자료형! 위 두개는 함수포인터의 자료형과 포인터 배열의..

[Native C++] 4. Java클래스 생성과 C소스 연결하기

1. java에서 호출할 패키지와 class를 생성합니다. 샘플프로젝트에서는 sample 패키지 아래에 Sample 클래스를 추가하였습니다. 2. MainActivity에 있는 native 관련 매소드들을 sample.class에 잘라 넣습니다. 그리고 소스를 일부 수정합니다. 바로 native로 연결해도 되지만 굳이 2번 거치도록 한 이유는 java에서 소스를 고쳐야 할 경우 여기서 고치도록 하려고 했습니다. 여기는 개인 성향에 따라 다른 부분이라 따라하지 않아도 무관합니다. 3. 빨간색으로 되어있는 jni_stringFromJNI()에 마우스를 좌클릭하면 왼쪽 위에 빨간 느낌표가 뜹니다. 느낌표를 클릭하고 Create JNI function for jni_stringFromJNI를 클릭합니다. 클릭하..

Android 2022.10.27

[Native C++] 3. 기본 헤더파일 경로 추가하기.

이 챕터는 굳이 할 필요 없는 챕터인데 설명을 위해 넣은 챕터입니다. 기존에 가진 소스를 활용할 경우 헤더파일 경로를 로 되어 있는것을 ""으로 수정하고 싶을 수도 있습니다. ​ 그래서 샘플프로젝트를 이용하여 기본 헤더파일 경로를 추가해보도록 하겠습니다. ​ 1. CmakeList.txt에 디렉토리 경로 추가인 include_dierctories를 입력하고 안에 경로를 넣습니다. 예제에서는 src 폴더입니다. 2. 그리고 sample.cpp에 #include "src/src.h"를 include 로 변경하고 동기화 후 빌드하면 됩니다.

Android 2022.10.27

[Native C++] 2. C소스 포함시켜서 빌드하기

1. 프로젝트 폴더에서 app/src/main/cpp/ 에 자신이 라이브러리로 만들고자 하는 소스파일을 넣습니다. 저같은 경우 cpp 폴더에 sample 소스파일을 넣었고, 또한 cpp폴더에 src 폴더를 만들고 src 소스파일을 넣었습니다. 2. CMakeLists.txt를 클릭하여 add_library에다가 위에 추가한 파일들과 생성할 라이브러리 이름을 입력합니다. 이 예제에서는 라이브러리 이름을 Sample-lib로 지정하여 변경하였으며, 1번에서 추가한 파일들인 sample.cpp sample.h src/src.c src/src.h 를 입력하였습니다. 또한, target_link_libraries에도 다음과 같이 위에 입력한 라이브러리 이름으로 변경합니다. 3. 그리고 동기화 후 build 합니다..

Android 2022.10.27

[C] 매크로 함수 이해하기

아래와 같은 코드가 있습니다. #include int add_int(int x, int y); float add_float(float x, float y); #define fun( name0, name1, x, y )name0##_##name1(x,y) #define out( name0, name1, data )out_##name1(name0, name, data) #define out_int(name0, name1, data)printf(#name0"_"#name1 ": [ %d ]\n", data) #define out_float(name0, name1, data)printf(#name0"_"#name1 ": [ %f ]\n", data) void main() { int ia = 200, ib = 3..

[C] 매크로 함수에서 do~while(0)을 쓰는 이유

매크로 함수를 보다보면 do~while(0) 형태로 되어있는것을 보게 됩니다. #define add(a,b,c) do{a = a + b; }while(0) 왜 이렇게 사용하는지 한번 알아볼께요. 아래는 일반적인 매크로 함수 입니다. #include #define add(a,b,c) {a = a + b; \ c = a + b;} void main() { int a = 300, b = 200, c; if (a > b) { add(a, b, c); //if에 { } 를 사용! } else { printf("Test"); //else에 { } 를 사용! } printf("[ %d %d %d] \n", a, b, c); } 위 코드를 컴파일 해보면 정상적으로 동작합니다. 자 이제 if와 else의 소괄호를 없애고..

[Windows DLL] 참고3. Release와 Debug의 차이

개발을 하는 경우에는 보통 Debug모드로 설정하고 진행합니다. Debug 모드로 Build 하면 빌드된 실행파일에 프로그램을 디버깅하기 위한 정보들이 포함됩니다. 그래서 프로그램을 디버깅할때 좋지만, 디버깅하기 위한 정보들도 포함되어있기 때문에 프로그램의 크기가 증가합니다. 따라서 프로그램 개발을 종료하고 배포할때에는 디버깅 정보들이 포함되지 않는 Release모드로 Build하여 배포하게 됩니다. 배포시 꼭 Release로 빌드한 DLL 또는 응용프로그램을 사용하시길 바랍니다.

Windows/DLL,MFC 2022.10.26

[Windows DLL] 참고2. MFC으로 개발한 프로그램을 배포할시 유의사항

MFC로 개발한 프로그램들은 기본적으로 MFC에서 제공하는 DLL(동적 라이브러리)에 포함된 라이브러리들을 링크하여 실행합니다. 이때, MFC로 개발한 프로그램을 배포받은 사용자의 PC에 MFC 기본 DLL이 설치되어 있지 않다면 오류가 발생합니다. 이러한 오류를 방지하고자 Bulid할때 사용하는 MFC 기본 DLL의 라이브러리 내용까지 포함시켜 배포 프로그램을 생성합니다. 프로그램의 크기는 커지지만 안정성은 좋아집니다. 설정하는 방법은 MFC로 개발한 프로젝트 속성 페이지에서 [고급]을 클릭하면 [프로젝트 기본값]에 [MFC 사용]이 있는데, 이를 "정적 라이브러리에서 MFC 사용"으로 변경하면 세팅이 완료됩니다. - 공유 DLL에서 MFC 사용이라고 기본으로 설정되어있습니다. - 이를 정적 라이브러리..

Windows/DLL,MFC 2022.10.21

[Windows DLL] 참고1. Test 프로그램과 DLL을 동시에 컴파일 하기.

각각의 프로젝트를 만들어서 따로 컴파일 및 실행하면 은근히 번거롭습니다. 또한, 앱 실행하면서 DLL 내부를 디버깅 하고 싶은데 프로젝트를 따로 실행하면 디버깅이 불가능합니다. 그래서 앱 실행프로젝트와 DLL 프로젝트를 동시에 디버깅하는 방법에 대해서 설명합니다. 방법은 엄청 간단합니다. 바로 빌드 종속성을 설정하면 되는데요.. 1. 테스트대상 프로젝트에 마우스 커서를 올리고 우클릭하면 [빌드 종속성]이라는 항목이 있으며, 거기서 [프로젝트 종속성]을 클릭합니다. 2. 종속 대상으로 DLL생성 프로젝트를 체크하고 확인을 누릅니다. 3. 그리고 리빌드하면 성공이 2라고 뜨면서 2개의 프로젝트를 빌드 했음을 확인 할 수 있습니다. 이렇게 설정하면 디버깅시에 테스트용 UI 프로젝트를 실행하면서 DLL에 대한 ..

Windows/DLL,MFC 2022.10.21
반응형