2 분 소요

오늘부터 어도비 프리미어 공부를 시작했다.

이 부분에 대한 내용도 여기 코딩일지 사이트에 넣을까 하다가, 본래의 목적이 퇴색될 것 같아, 본래 네이버 블로그(yhon89)블로그에만 기록하기로 했다. 한가지 흥미로운 점은 프리미어에서는 proprj라는 확장자 파일을 사용한다는 것이었다. 반면에 비쥬얼스튜디오에서 Visual C++로 프로젝트를 만들면, vcproj/vcxproj라는 확장자 파일이 생성된다는 것이다.

.VCXPROJ 파일이란?

Visual CX[C++ Extension] Project의 약자로,

VCSXPROJ 파일은 코드를 포함하고 있지는 않지 프로젝트를 빌드하기 위해 프로젝트에 대해 정의된 모든 클래스, 대상 및 속성을 참조하고 있다. 즉 탑을 쌓아올리기 위해서 그에 맞는 내부 규정?정도로 이해하면 될 것 같다. (이것들은 모두 텍스트편집기에서 여는게 가능하다.xml파일형식으로 생성된 텍스트 파일이기 때문이다.)

nRF52 BLE 개발하기 - nfc/record_launch_app

해당 링크에서 흥미로운 코드를 보았다. 그래서 일정에 없었지만 살짝만 리뷰해보려고 한다.

아래 코드는 기본적으로 NFC(Near Field Communication)을 사용하여 Android 및 Windows Phone 플랫폼에서 실행되는 애플리케이션을 위한 NDEF(NFC Data Exchange Format)메시지를 인코딩하는 함수이다.

ret_code_t nfc_launchapp_msg_encode(uint8_t const * p_android_package_name,
                                    uint8_t         android_package_name_length,
                                    uint8_t const * p_win_app_id,
                                    uint8_t         win_app_id_length,
                                    uint8_t       * p_buf,
                                    uint32_t      * p_len)
{
    ret_code_t err_code;

    /* NFC NDEF 메시지 설명 생성, 용량 - 2개의 레코드 */
    NFC_NDEF_MSG_DEF(nfc_launchapp_msg, 1);

    /* NFC NDEF Windows Phone LaunchApp 레코드 설명 생성 */
    NFC_NDEF_WINDOWS_LAUNCHAPP_RECORD_DESC_DEF(nfc_win_launchapp_rec,
                                               p_win_app_id,
                                               win_app_id_length);

    /* NFC NDEF Android Application 레코드 설명 생성 */
    NFC_NDEF_ANDROID_LAUNCHAPP_RECORD_DESC_DEF(nfc_and_launchapp_rec,
                                               p_android_package_name,
                                               android_package_name_length);

    if (p_win_app_id != NULL)
    {
        /* 첫 번째 레코드로 Windows Phone LaunchApp 레코드 추가 */
        err_code = nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_launchapp_msg),
                                           &NFC_NDEF_WINDOWS_LAUNCHAPP_RECORD_DESC(nfc_win_launchapp_rec));
        VERIFY_SUCCESS(err_code);
    }
    if (p_android_package_name != NULL)
    {
        /* 두 번째 레코드로 Android Application 레코드 추가 */
        err_code = nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_launchapp_msg),
                                           &NFC_NDEF_ANDROID_LAUNCHAPP_RECORD_DESC(nfc_and_launchapp_rec));
        VERIFY_SUCCESS(err_code);
    }
    VERIFY_FALSE(NFC_NDEF_MSG(nfc_launchapp_msg).record_count == 0,
                              NRF_ERROR_INVALID_PARAM);

    /* 전체 메시지를 버퍼로 인코딩 */
    err_code = nfc_ndef_msg_encode(&NFC_NDEF_MSG(nfc_launchapp_msg),
                                   p_buf,
                                   p_len);

    return err_code;
}

1.NFC NDEF 메시지 설명 생성, 용량 - 2개의 레코드

2.NFC NDEF Windows Phone LaunchApp 레코드 설명 생성

3.NFC NDEF Android Application 레코드 설명 생성

4.첫 번째 레코드로 Windows Phone LaunchApp 레코드 추가

5.두 번째 레코드로 Android Application 레코드 추가

6.전체 메시지를 버퍼로 인코딩


흥미로운점(1) 사용자 정의 리턴타입

여기서 한가지 흥미를 가졌던 부분은 반환형식을 기입하는 자리(int나 char 등)에 ret_code_t가 써있었다는 것이다. 알고보니 반환형을 정해진것만 쓸수 있는 것 뿐만 아니라, 사용자 정의가 가능하다는 것이었다.

보통 이러한 ‘사용자 정의 타입’은 enum형으로 정의되어 있으며, 여러가지 반환 값에 대한 의미있는 이름을 제공한다고 한다.

이를 이용해서 예제코드를 적어보았다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

typedef enum{
    FAIL,       // 0
    SUCCESS,    // 1
    HOLD_OFF    // 2
} foo;

foo bar(char c) {
    if (c == 'f') {
        return FAIL;
    }
    else if (c == 's') {
        return SUCCESS;
    }
    else {
        return HOLD_OFF;
    }
}
void checkState(int n) {
    if (n == 0) {
        printf("fail");
    }
    else if (n == 1) {
        printf("success");
    }
    else {
        printf("hold_off");
    }
}

int main() {
    int n, st;
    scanf("%c", &n);
    st = bar(n);
    
    checkState(st);

    return 0;
}

이때 ‘s’를 입력하면 ‘success’가, ‘f’를 입력하면 ‘fail’이 뜬다.

c로 되어있는 오픈소스들을 보다보면 이런코드들이 많은 것 같다. 나도 이렇게 짜려고 신경써야 겠다.

열거형으로 관련있는 항목 묶어 관리하기

#include <stdio.h>

enum Animal { Mouse, Cow, Tiger };

typedef enum
{
    EXIT,       //0
    HOLD_OFF    //1
}STATE;

STATE main(void)
{
    enum Animal animal = Tiger; // 열거형 변수에 열거형 상수 지정
    if (animal == Tiger)
    {
        printf("호랑이\n");
    }

    return EXIT;
}

코드리뷰: 열거형을 사용하여 여러 항목을 하나의 이름으로 관리해보았다.

다음과 같이 enum을 쓰면 여러개의 항목(Mouse, Cow, Tiger)을 하나의 이름(Animal)으로 관리하여 프로그램을 작성할때 편리한 것 같다.

그리고 main()부에서도 반환형을 나의 입맛에 맞게 바꿔보았다. 반환타임을 STATE로 두고, return 뒤에 0을 적었던 것을, EXIT으로 대체했다.

출처:https://www.dotnetkorea.com/docs/c-language/23-enumeration/enum/

언어:

카테고리:

업데이트:

댓글남기기