다음을 통해 공유


경고 C26437

조각화하지 마세요.

C++ 핵심 지침: ES.63: 조각화 안 함

언어는 조각화를 허용하고 위험한 암시적 캐스트의 특별한 경우로 볼 수 있습니다. 의도적으로 수행되고 즉각적인 문제로 이어지지 않더라도 여전히 권장되지 않습니다. 관련 데이터 형식에 대한 추가 요구 사항을 강제로 적용하여 코드를 변경하기 어렵게 만듭니다. 형식이 다형이거나 리소스 관리를 포함하는 경우 특히 그렇습니다.

설명

이 규칙은 명시적 할당뿐만 아니라 암시적 조각화에 대해서도 경고합니다. 암시적 조각화는 결과가 현재 함수에서 반환되거나 데이터가 다른 함수에 전달될 때 발생합니다.

또한 이 규칙은 할당에 실제 데이터 조각화가 포함되지 않는 경우(예: 형식이 비어 있거나 위험한 데이터 조작을 수행하지 않는 경우) 플래그를 지정합니다. 나중에 데이터 형식 또는 동작이 변경될 경우 바람직하지 않은 회귀를 방지하기 위해 이러한 경고를 수정해야 합니다.

예시

다음 코드 예제에서는 읽 id_ex지만 함수 호출자는 개체의 조각만 가져옵니다.

struct id {
    int value;
};

struct id_ex : id {
    int extension;
};

bool read_id(stream &s, id &v) {
    id_ex tmp{};
    if (!s.read(tmp.value) || !s.read(tmp.extension))
        return false;

    v = tmp; // C26437
    return true;
}

이 문제를 해결하려면 올바른 형식을 사용하도록 함수를 업데이트합니다.

// ...
bool read_id(stream &s, id_ex &v) {
// ...