2016-12-23 5 views
-1

나는 C에서이 구조체를 가지고 :비트 필드와 다른 데이터 형식을 C90의 단일 구조체 필드로 사용하는 것은 나쁜 습관입니까?

typedef struct Set { 
    unsigned int state : 1; 
    char array[LEN]; 
} Set; 

을이 컴파일 내가 비트 필드가 실제로 문자 배열 그 자체로 하나 개의 비트를 변경하는 것으로 나타났습니다 실행하는 동안! 그래서 이것이 몇 가지 알려진 문제인지 궁금해하고 하나의 구조체에 다른 데이터 형식의 비트 필드를 포함 시키거나 올바르게 처리하지 않는 것이 바람직하지 않습니다.

+4

는 당신이 char 배열을 보여주는 완전한 프로그램의 때문에 변경되는 한 마을 비트 필드? 나는 믿지 않는다. – DeiDei

+0

[최소한의 완전하고 검증 가능한 예] (https://stackoverflow.com/help/mcve)가 필요합니다. – user3386109

+0

코드가 너무 커서 여기에 게시 할 수 없으며 구조체에서 작업하는 많은 기능이 있습니다. 나는 비트 필드를 char 타입의 필드로 대체하면 모든 것이 정상적으로 작동한다는 것을 알았다. 다른 데이터 형식의 필드가있는 비트 필드를 사용하면 괜찮습니까? – Yos

답변

3

호그 워시!

struct의 요소는 이고 항상이며 메모리에 서로 연결되어 있지 않으므로 안심하십시오.

프로그램에 명확하게 의미가있는 구성이 있습니다. 정의되지 않은 동작 - 대부분 array[-1] 또는 그와 유사한 색인을 생성하고 있습니다.

(일부 스마트 알렉은 #define struct union 작성했습니다 않는 : 당신이 C.에 키워드 다시 정의하지 말아야 때문에 그 행동은 정의되지 않는다)