C언어 구조체 변수 비교 방법
글쓴이: kkb / 작성시간: 화, 2022/06/28 - 6:20오후
struct example { unsigned char a : 1; unsigned char b : 1; unsigned char c : 1; unsigned char d : 1; unsigned char e : 1; unsigned char f : 1; unsigned char g : 1; unsigned char h : 1; }; struct example ex1; struct example ex2;
ex1과 ex2값이 같은지 다른지 한번에 비교할 수 있을까요?
Forums:
1) XOR을 쓰거나
1) XOR을 쓰거나
if(!(ex1 ^ ex2)) ex1과 ex2가 같으면 XOR한 값이 0, 그래서 !(0)은 TRUE로 판정됩니다.
2) casting 해서 비교
if((unsigned char)(ex1) == (unsigned char)(ex2))
...
테스트는 해 보고 올리신 거죠...?
테스트해 보지 않고 적었는데 간단히 되지는 않는군요.
테스트해 보지 않고 적었는데 간단히 되지는 않는군요.
아래는 한 예입니다. 단 아랫분이 언급한 것처럼 side-effect가 있을수는 있습니다.
1. 단순 노가다
1. 단순 노가다
한 번만 함수로 만들어 놓으면 됩니다.
C++였으면
bool operator==(const example &ex1, const example &ex2);
했겠죠.2. 라이브러리 의존
memcmp(&ex1, &ex2, sizeof(struct example))
깔끔하고 좋긴 한데, 결과적으로 1바이트 비교하려고 라이브러리 함수를 호출하는 것이죠.
3. 막가파식 방법 (비추)
ex1
와ex2
가 모두 lvalue이고,struct example
이 정확히 1바이트일 것이라고 확신할 수 있다면...(*(unsigned char *)&ex1) == (*(unsigned char *)&ex2)
간편하긴 하고 실제로 이런 테크닉 여러 군데서 종종 봅니다만 권장할 만한 일인지는 잘 모르겠네요.
유니언...
테스트는 안해봤습니다.
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
비트 쪼개기..ㅋㅋ
비트 쪼개기..ㅋㅋ
------------------------------------------------------------
ProgrammingHolic
#include <stdio.h>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
\x1b[40m\x1b[36m
\x1b[40m\x1b[36m
좋은 거 알았네요. 간단한 출력에는 굳이 ncurses를 쓸 필요가 없겠네요.
댓글 달기