최상의 답변
시스템 경계 또는 네트워크 프로토콜을 넘어 구조 오프셋을 일치시켜야하는 매우 어려운 수수께끼 . 사양에 따르면 크기는 취할 수있는 가장 큰 값을 나타내는 데 필요한 최소값이어야합니다. 예를 들어 일반적인 상태 머신 상태 열거 형에는 바이트 만 필요할 수 있습니다.
크기를 제어하는 AFAIK는 세 가지 방법 만 있습니다.
일부 (전체는 아님) 컴파일러에는 크기를 sizeof (int) 또는 32 비트로 강제하는 컴파일러 스위치 스위치 구문은 MSC와 gccc / clang간에 동일하지 않습니다.
두 번째 방법은 16 비트 필드를 채워야하는 경우 해당 크기가 필요한 더미 최대 값을 정의하는 것입니다.
다른 방법은 구조체 정의에서 일반 int 스타일을 사용하는 것입니다.하지만 하나는 열거 형 이름으로 값을 표시하고 대신 정수만 가져 오는 디버거의 편리함을 포기합니다.
그런 다음 열거 형을 포함하는 구조체를 패딩되지 않고 패킹하도록 지정해야합니다.
Answer
일부 변수의 일부가없는 경우 x
는 const
또는 volatile
이고 x
는 배열 유형이 아닙니다. 그 다음 문장…
x = x;
… 대부분은 아무것도하지 않습니다. 잘 구성되어 있습니다. x
가 미리 초기화되었다고 가정하면 ¹ 또한 잘 정의되어 있습니다. 할당이 제대로 정의되지 않았습니다. 몇 가지 잠재적 인 예외를 제외하고 프로그램의 상태를 실제로 변경합니다 (아래 참조).
x
에 유형.
struct foo {
char buf[42];
int x;
};
struct foo x = { "Hello World", 18 };
x = x; // no big deal.
그렇다면 “실수”는 무엇입니까? 유용한 코드는 아니지만 해당 설명에 맞는 코드가 상당히 많습니다. 다른 일을하려고했지만 놓친 경우는 실수 일뿐입니다.
[부록 :이 과제의 쓸모가 없다는 점을 감안할 때 컴파일러는 당신이 할 가능성이 높기 때문에 경고하는 경향이 있습니다. id = “af7847d40e”>