Develop/Embedded System 3

[C언어] Implementation-Defined Behaviour

키워드Undefined Behaviour, Unspecified Behaviour, Implementation-Defined Behaviourㅤ프로그램의 이식성A 환경에서 실행하는 프로그램을 B 환경에서 실행하려고 할 때, 전환 과정에 노력이 덜 필요할수록 이식성이 좋다고 표현함. 이식성을 표현하기 위해 3가지 Behaviour(=Behavior)를 정의.ㅤex) Intel 맥에서 돌아가던 프로그램을 ARM 맥에서 돌리는 과정이 쉬운가?ㅤUndefined Behaviour코드가 어떻게 동작할지 보장하지 못하는 상태. 지금은 잘 동작하는 것처럼 보여도 다른 상황에서는 문제가 발생할 수 있다. 이식성 측면에서 가장 위험한 요소.ㅤUndefined Behaviour 의 경우, 컴파일러가 컴파일 자체를 실패시키..

[C언어] stdint.h 를 통한 타입 작성과 CLANG Header 읽기 개고생

키워드type, stdint.h, implementation-defined behaviour, int32_t, 이식성ㅤ타입을 정확하게 쓰기여러 임베디드 샘플코드를 보면 타입이 단순히 int 처럼 작성하는게 아니라, int32_t 이렇게 작성하는 것을 볼 수 있다. 이게 더욱 정확하게 bit수까지 포함해 타입을 작성하기 때문에 정확한 개발이 가능하고, 이후 컴파일러나 환경 변화로 인해 타입 별 bit 수가 변경되더라도 손쉽게 핸들링이 가능하기 때문에 유용한 방법이라고 한다. ( = 이식성을 높이기)ㅤ이걸 자동으로 해주는게 stdint.h 헤더파일이다.stdint.h 헤더를 통해 타입을 define하는 경우, 코드에서 sign여부와 길이를 정확하게 명시한 타입을 사용할 수 있다.ㅤ아래는 xcode에서 std..

[C언어] 함수의 타입변환은 무죄

함수의 이름은 함수 포인터이다.int func(int a, int b){ return a + b;}int main(void) { printf("%d\n", func(10, 20)); printf("%d\n", (*func)(10, 20)); // 함수포인터에 별 아무리 찍어도 해당 함수포인터를 가리킴 printf("%d\n", (****func)(10, 20)); // 근데 이건 안됨. 함수 이름에는 크기가 없어서 그렇다. // printf("%d\n", func[0](10, 20)); return 0;}ㅤㅤ함수포인터의 유용성여러 동작에서 공통된 동작이 있으면 함수로 빼서 사용.함수의 동작을 모두 구현하지 않고 일부를 비워둔 상태에서, 다른 사람이 로직을 구현하..

320x100