구조체 비트 필드/공용체를 함께 사용하기 목차 구조체 비트 필드 지금까지 구조체의 멤버는 각 자료형 크기만큼 공간을 차지했다. 하지만 구조체 비트 필드를 사용하면 구조체 멤버를 비트 단위로 저장할 수 있다. 특히 CPU나 기타 칩의 플래그를 다루는 저수준(low level) 프로그래밍을 할 때 기본 자료형보다 더 작은 비트 단위로 가져오거나 저장하는 경우가 많으므로 구조체 비트 필드가 유용하게 사용된다. C99 표준에서는 비트 필드로 사용할 수 있는 자료형을 _Bool, signed int, unsigned int, int로 규정하고 있지만 대부분의 컴파일러에서는 모든 정수 자료형을 사용할 수 있다. 보통은 비트 필드에 부호 없는(signed) 자료형을 주로 사용한다. 단 실수 자료형은 비트 필드로 사용..
비트 연산으로 변환 배열의 값은 float형으로 5.05 를 나타낸다. TCP/IP 통신을이용해 데이터를 수신하니 리틀엔디언 효과로 자리 변환이 일어났다. 위와 같은 이유로 아래와같이 배열을 역순으로 비트연산 하였다. iii 는 unsigned long type 이고, ii 는 float type 이다. 0xFF 는 부호가 없는 정수일경우 없어도 무방하지만 부호가있는 정수는 0xFF를 and연산해주어야 한다.(부호확장 방지) 빨간 박스의 코드와 같이 가져온값은 float로 꼭 변환하여 사용해야 한다. union 사용 union 구조체로 선언하면 동일한 값이 자동으로 들어간다. unsigned char일경우 부호가 없기 때문에 부호확장시 전부 0을 채워넣는다. 그래서 &0xFF가 필요 없다. 결과
C언어 오류처리 error ㆍerror 은 에 다음과 같이 정의되어 있다. extern int errno; 선행처리기 문자열 정의 설명 E2BIG 너무 긴 인수 목록 EACCESS 접근 거부 EAGAIN 재시도 EBADF 잘못된 파일 번호 EBUSY 이미 사용 중인 디바이스나 자원 ECHILD 자식 프로세스 없음 EDOM 함수 영역을 넘어선 수학 인수 EEXIST 이미 존재하는 파일 EFAULT 잘못된 주소 EFBIG 너무 큰 파일 EINTR 인터럽트가 걸린 시스템 호출 EINVAL 유효하지 않은 인수 EIO 입출력 오류 EISDIR 디렉터리임 EMFILE 열린 파일이 너무 많음 EMLINK 너무 많은 링크 ENFILE 파일 테이블 넘침 ENODEV 그런 디바이스 없음 ENOENT 그런 파일이나 디렉터리..
; C 언어 Dos에서의 메시지 박스 🔔 예) 도스에서의 메시지 박스 사용 #include #include #pragma comment (lib,"user32.lib") HANDLE hFile; char buff[1023]; int iret; int main() { hFile = CreateFile("a.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(INVALID_HANDLE_VALUE != hFile) { ReadFile(hFile, buff, 1023, &iret, NULL); buff[iret]; printf("안녕 난 printf야\n"); MessageBox(NULL, buff,"File read",MB_..
C언어 조건부 컴파일 지시자는 #if, #else, #elif, #endif가 있다. #if 조건 수식 명령문1 #else 명령문2 #endif 조건수식이 참일 경우 명령문1 이 컴파일되고, 거짓일 경우에는 명령문2가 컴파일된다. 작성중 오류를 검사하기 위한 출력코드를 프로그램에 삽입하였다가 프로그램 검사가 끝난 경우 출력문을 주우는 것을 조건부 컴파일을이용하면 다음과 같이 작성할 수 있다. #define DEBUG 1 void main() { #if DEBUG == 1 printf("program start\n); #endif ..... } 위와 같은 형식은 선택적 컴파일 또는 조건부 컴파일이라 한다. 조건부 컴파일로 또 다른 지시자는 #ifdef, #ifndef, #endif로 매크로의 존재여부에 따..