Void 포인터, 유형 캐스팅 및 가능한 코드 개선

vdenotaris

다음과 같이 코드를 고려하십시오.

void get_value_by_peek_name(json_object *json_obj, const char *peak_name, void **value) {
    json_object *value_obj;
    if (json_object_object_get_ex(json_obj, peak_name, &value_obj))
        if (json_object_is_type(value_obj, json_type_double))
            sscanf(json_object_to_json_string(value_obj), "%lf", *value);
}

이 구현은 예상대로 경고를 생성합니다.

format ‘%lf’ expects argument of type ‘double *’, but argument 3 has type ‘void *’

이 기능을 더 잘 구현하기위한 제안을 찾고 있으며 물론 위의 경고를 피하십시오.

다른 곳에서도 코드를 고려하면 :

double timestamp;
void *holder;

// some other code...
// response_obj already initialized 
get_value_by_peek_name(response_obj, "timestamp", &holder);
timestamp = *((double *) holder);
printf("- timestamp: %lf\n", timestamp);

명시 적으로 void 포인터 를 선언하지 않고 을 직접 사용 하여이 코드를 더 우아 하게 만드는 좋은 방법이 있습니까? holdertimestamp

알크

위의 경고를 피하십시오.

  1. 마지막 매개 변수 get_value_by_peek_name()를 사용하도록 정의하십시오 void*.

    void get_value_by_peek_name(json_object * json_obj, const char * peak_name, void * value)
    
  2. 확인 holderA와 점 double(또는뿐만 아니라 제대로 정렬되어 충분한 메모리에 적어도를 개최 double한 후)

  3. 참조를 해제 하기 sscanf() 전에 호출에서 포인터를 올바르게 캐스팅합니다 .

    sscanf(json_object_to_json_string(value_obj), "%lf", *((double**)value));
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

int에 대한 void 포인터 형식 캐스팅 오류

분류에서Dev

Void * 산술 및 유형 캐스팅

분류에서Dev

C : void 포인터를 통한 플랫폼 독립성 및 캐스팅

분류에서Dev

유형 캐스팅이없는 Void 포인터

분류에서Dev

포인터가있는 구조체를 통한 다형성 및 캐스팅

분류에서Dev

포인터 조작 및 유형 캐스팅

분류에서Dev

C : printf ()를 사용한 데이터 유형 및 캐스팅

분류에서Dev

void 반환 유형 및 선택적 매개 변수가있는 메서드에 대한 Return_value_policy

분류에서Dev

상수 변수에 대한 C ++ 유형 캐스팅 포인터

분류에서Dev

void가 아닌 반환 형식으로 람다를 함수 포인터로 캐스팅

분류에서Dev

unsigned char * buffer를 인자를받을 수있는 호출 가능한 void 포인터로 캐스팅

분류에서Dev

C Re : Void 및 문자 유형에 대한 포인터, Typecasting 보장

분류에서Dev

C ++ 11 스마트 포인터 소유권 및 캐스팅

분류에서Dev

포인터 유형 캐스팅

분류에서Dev

람다를 void *로 캐스트 한 다음 함수 포인터로 캐스팅 할 수없는 이유는 무엇입니까?

분류에서Dev

메서드 포인터 전달 및 캐스팅

분류에서Dev

C의 구조체 유형에 대한 포인터 캐스팅 이해

분류에서Dev

개인 속성 및 변경 가능한 유형

분류에서Dev

objc_msg를 수정하기 위해 캐스팅하기위한 self 및 delegate 유형 잘못된 인수 개수 오류 전송?

분류에서Dev

C ++에서 포인터의 형식 변환 및 형식 캐스팅

분류에서Dev

다른 포인터 유형 T로 캐스팅 된 Void 포인터는 T처럼 작동하지 않습니다.

분류에서Dev

캐스팅 개체 유형

분류에서Dev

호환 가능한 반환 유형의 조합으로 캐스팅하면 함수 포인터에 대한 호환성 기준을 충족합니까?

분류에서Dev

사전 설정 및 선택 가능한 값으로 부트 스트랩 테이블의 레코드 필터링

분류에서Dev

신속한 유형 캐스팅 및 괄호

분류에서Dev

Linq to Entities 및 복잡한 유형 캐스팅

분류에서Dev

포인터 산술 및 캐스팅

분류에서Dev

C에서 void *가 가리키는 포인터 유형 확인

분류에서Dev

함수 호출, void * 인수를 다른 유형으로 캐스팅

Related 관련 기사

  1. 1

    int에 대한 void 포인터 형식 캐스팅 오류

  2. 2

    Void * 산술 및 유형 캐스팅

  3. 3

    C : void 포인터를 통한 플랫폼 독립성 및 캐스팅

  4. 4

    유형 캐스팅이없는 Void 포인터

  5. 5

    포인터가있는 구조체를 통한 다형성 및 캐스팅

  6. 6

    포인터 조작 및 유형 캐스팅

  7. 7

    C : printf ()를 사용한 데이터 유형 및 캐스팅

  8. 8

    void 반환 유형 및 선택적 매개 변수가있는 메서드에 대한 Return_value_policy

  9. 9

    상수 변수에 대한 C ++ 유형 캐스팅 포인터

  10. 10

    void가 아닌 반환 형식으로 람다를 함수 포인터로 캐스팅

  11. 11

    unsigned char * buffer를 인자를받을 수있는 호출 가능한 void 포인터로 캐스팅

  12. 12

    C Re : Void 및 문자 유형에 대한 포인터, Typecasting 보장

  13. 13

    C ++ 11 스마트 포인터 소유권 및 캐스팅

  14. 14

    포인터 유형 캐스팅

  15. 15

    람다를 void *로 캐스트 한 다음 함수 포인터로 캐스팅 할 수없는 이유는 무엇입니까?

  16. 16

    메서드 포인터 전달 및 캐스팅

  17. 17

    C의 구조체 유형에 대한 포인터 캐스팅 이해

  18. 18

    개인 속성 및 변경 가능한 유형

  19. 19

    objc_msg를 수정하기 위해 캐스팅하기위한 self 및 delegate 유형 잘못된 인수 개수 오류 전송?

  20. 20

    C ++에서 포인터의 형식 변환 및 형식 캐스팅

  21. 21

    다른 포인터 유형 T로 캐스팅 된 Void 포인터는 T처럼 작동하지 않습니다.

  22. 22

    캐스팅 개체 유형

  23. 23

    호환 가능한 반환 유형의 조합으로 캐스팅하면 함수 포인터에 대한 호환성 기준을 충족합니까?

  24. 24

    사전 설정 및 선택 가능한 값으로 부트 스트랩 테이블의 레코드 필터링

  25. 25

    신속한 유형 캐스팅 및 괄호

  26. 26

    Linq to Entities 및 복잡한 유형 캐스팅

  27. 27

    포인터 산술 및 캐스팅

  28. 28

    C에서 void *가 가리키는 포인터 유형 확인

  29. 29

    함수 호출, void * 인수를 다른 유형으로 캐스팅

뜨겁다태그

보관