openlang

C에서 중첩된 구조체 멤버들의 크기를 모두 출력할 수 있나요?

하나의 구조체 안에 여러 다른 구조체가 들어 있는 상황입니다. 간단한 예를 들면:

typedef struct payload {
    int offset;
} payload_t;

typedef struct record {
    payload_t payloads[12];
    int status;
} record_t

record_t에 속한 구조체들의 크기를 모두 출력할 수 있을까요?

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    먼저 해당 타입들을 알아야 합니다. 예를 들어 java나 c#과 달리 C에는 리플렉션이 없습니다.

    타입들을 안다면 sizeof와 결과를 출력할 함수만 있으면 됩니다.

    영어에서 번역원문 보기
  2. 고유 링크

    C 언어 자체만으로는 이런 내부 조사를 지원하지 않으므로 불가능합니다. 할 수 있는 건 구조체의 멤버를 하나씩 살펴보며 크기를 출력하는 것뿐입니다.

    다만 저는 8년 전에 멤버가 400개인 크고 복잡한 구조체에서 바로 이 작업을 해야 했습니다. 결국 오브젝트 파일의 디버깅 정보를 파싱해서 필요한 것을 얻었습니다. 자세한 내용은 잊었지만 -g 옵션으로 컴파일한 뒤 적절한 도구로 디버그 정보를 덤프해야 합니다. readelf와 objdump 도구 및 설명서를 살펴보세요.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. Google Colab에서 MATLAB 사용하기

    Google Colab(클라우드의 Jupyter)에서 MATLAB 명령을 쓸 수 있나요? 예를 들어 Google Colab에서 bin(vbt, Name, Value), tbfi(vbt, Name, Value), tuff(vb…

    답글 2최근 활동 matlab
  2. gdb에서 주소로 어셈블리 명령에 중단점을 설정할 수 있나요?

    제가 시도한 명령: 그런데 이 명령은 없는 모양이에요. gdb에서 이런 걸 할 수 있나요?

    답글 2최근 활동 assembly
  3. Playwright 단언에서 두 텍스트 값 중 하나를 허용할 수 있나요?

    텍스트에 one 또는 two 중 하나가 들어 있는지 확인하고 싶어요: Playwright에서 이렇게 동작하게 할 수 있나요? 같은 걸 문장 안에도 넣을 수 있을까요, 예를 들면

    답글 2최근 활동 typescript