본문 바로가기

공부/C언어

(13)
[C] error: multiple definition 참고 https://qt3b1s62da6s.tistory.com/480 multiple definition 에러가 발생하는 상황 header file 안에 global variable 을 넣어서 쓰고 싶을 때 자주 발생하는 오류다. linking 할 때 발생한다. 다음과 같은 header file a.h 가 있다고 하자. a.h #define QUAD 5 const dou.. qt3b1s62da6s.tistory.com 200827 - http://hisjournal.net/blog/142 I wannabe FALCON :: C :: multiple definition 에러 카드 게임을 구현하는 코드를 짰는데, 컴파일해보니 이런 메시지가 나왔습니다. 0 errors, 0 warnings 아주 반가운 메시..
[C] error: undefined reference to 원인으로는 첫번째, call하는 함수의 실제 구현 부분을 찾을 수 없어서 발생한다. --> 정의는 되어있으나, 구현된 것을 찾을 수 없으므로 구현되어있는 함수 라이브러리를 링크 시켜준다. 나는 두번째의 경우로 문제를 해결했는데 cpp파일에서 C에 있는 함수를 call할 때 발생한다. c에 구현되어있는 함수의 정의가 적혀있는 헤더 파일에 다음과 같이 추가해준다. #ifdef _FILENAME_H_ #define _FILENAME_H_ extern typ_cantx_Var const *const ptr_Cantx; #ifdef __cpluspluse extern "C" { #endif /*정의 된 함수 추가*/ #ifdef __cpluspluse } #endif #endif /*_FILENAME_H_*/
[C]Warning: function declaration isn’t a prototype Warning: function declaration isn’t a prototype 다음과 같은 오류는 Void init() { ... } 과 같은 함수에서 발생 할수 있다. 해결 방법은 void init(void)를 추가 함으로써 해결 가능하다.
[소수점 연산] 낮은 bit의 MCU에서의 연산 처리법 나눗셈이나 소수점 연산이 많이 필요한 MCU가 낮은 비트 연산을 하는 MCU일때, 연산 자체가 많이 느려질수가 있다. 이에 따라 연산을 조금 더 빠르게 하기 위해서는 아래와 같은 방법을 사용하면된다. 예를 들어 X * B/A = Y 형태의 식에서 A = 13, B = 7이라고 하면 1) X * 7/13 = Y이다. 이때 B/A = 7/13 이므로 나눠버리면 소수점이 나오게 된다. 1) 식에서 2) X * 7/13 = X * 7 * 1/13이고, 1/13 = (약)0.077이다. 2) 식에서 0.077 = 0.077 / 1이고, 예를 들어 10bit의 분해능을 가진다 하면. 0.077 / 1 * 1024 / 1024 = 78.848/1024이다. 약 79/1024인데 79를 1024로 나누는 것, 즉 79..
임베디드에서 공용체(union)과 구조체(struct)의 사용 typedef union regA { struct { uint8_t a1; uint8_t a2; uint8_t a3; } bits; uint8_t regByte; } regA_t; 임베디드에서는 칩과 칩간의 통신을 기능을 제공하게 된다. 다음과 같이 공용체 내에 구조체를 사용하게 되면 메모리상 시작점이 같은 메모리를 사용하게 된다. 또한 통신 시 공용체로는 바이트 단위의 통신을, 구조체로는 비트 단위의 통신을 가능하게 한다.