최상의 답변
시스템 경계 또는 네트워크 프로토콜을 넘어 구조 오프셋을 일치시켜야하는 매우 어려운 수수께끼 . 사양에 따르면 크기는 취할 수있는 가장 큰 값을 나타내는 데 필요한 최소값이어야합니다. 예를 들어 일반적인 상태 머신 상태 열거 형에는 바이트 만 필요할 수 있습니다.
크기를 제어하는 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”>