본문 바로가기
728x90
반응형

3. 개발 관련/공부 :: c8

fallthrough in C (statement attribute) kernel driver code 를 보다 오랫만에 보는 문법이 반가워 정리해본다. 제목 그대로 switch-case 에서 fallthough를 지정하는 부분인데, 이전에는 무쓸모라고 막연히 생각하였다(그냥 break를 안쓰면 되니까..) 근래에 들어서는 code review 기반에서 괜찮은 attribute 사용방법으로 생각되었다. switch-case 에서 break missing 이 아닌 의도한 코드임을 알려줄 수 있으니,다른 사람이 쉽게 인지할 수 있는 문법으로 사용가능하겠구나 정도... __attribute__((fallthrough)); // GNU C [[fallthrough]]; // C17,C23 [[clang::fallthrough]]; // clang #include void g(vo.. 2023. 5. 8.
Flexible Array Member in C https://www.geeksforgeeks.org/ 나 https://embetronicx.com/ 에서 재밌어 보이는 topic 들 위주로만 다루어 보고 있다. struct 내에서 array 를 선언할 때 사이즈를 지정하지 않는 녀석으로 code size 관리에 유용하게 사용될 만 하다. #include typedef struct { char data[14]; // 배열 사이즈 지정 char op; char type; } STT; // 일반 struct 선언 typedef struct { char op; char type; char data[]; // 배열 사이즈 미지정 } FAM_ST; int main() { STT stt; FAM_ST FST; printf("Size of struct = %ld.. 2023. 5. 1.
function nesting in C (GNU C) function in funcion, declare a function in function, nested function 등등 아마도 정확한 표현이 nested function 일 것 같긴하다. (참조 : https://en.wikipedia.org/wiki/Nested_function) 업무 특성상 gcc 기반 환경에서 주로 개발을 하니 사용 가능한 부분이다. C99 등 표준 C 에서는 지원하지 않는 기능이다. 함수 중첩(함수 내에서 다른 함수의 선언/구현/호출) 기능은 거의 사용할 일이 없긴한데, 효율적으로 적용하면 이로울 부분도 있을 듯 한다. 간략한 사용 예는 다음과 같다. #include int main() { // main 함수 int a = 5; int b = 6; int sum(int ,.. 2023. 4. 28.
C :: padding / packing / bit fields 개발의 규모가 커지거나, 정확한 사이즈로 특정 영역을 관리해야 할 때, padding / packing / bit fields 지정 등을 주로 사용 한다. padding struct foobar { int a; // 4 byte char b; // 1 byte } 위 코드의 사이즈는 8 byte 이다. architecture 에 따라 다르나, 일반적으로 word 단위의 memory alignment 로 처리되며, 이러한 사이즈를 컴파일러 수준에서 맞추어 주는 작업을 structure padding 이라 한다. 간략하게 정리하면 아무것도 안하면, 그냥 다 alignment 에 맞게 padding 된다. #pragma pack() attribute packed struct foobar { int a; // .. 2023. 4. 20.
C :: global static variable and local static variable 지역변수와 전역변수는 흔히들 사용되고 익히들 안다. 잘 안쓰는 거라 그런지 개념이 휘발성인가..오래되면 까먹는다 global static variable : file 내에서만 static 으로 사용된다. 기본적으로는 메모리를 점유하며 계속 값이 업데이트/유지된다. 다른 파일 등에서도 사용하려면 당연히 non-static 으로 사용해야한다. local static variable : function/scope 내에서만 static 으로 사용된다. 함수 호출 시에만 값이 업데이트/유지 되는데, 아직까지 필요성을 모르겠다. 다른 분이 함수내에서 static 변수를 사용한다면 심히 불편할듯? extern variable in function : 이 것도 위와 유사하다...왜 땜에? 문제는 함수내 extern 이.. 2023. 4. 20.
linux - memory barrier (feat. 기묘한 이야기) memory barrier 를 사용하다 발견한 신기한 일. 주로 mb/smp_mb 등으로 사용되는 데 개념적인 내용은 아래와 같다. mb : generic memory barrier wmb : write memory barrier rmb : read memory barrier 주로 사용되는 케이스를 생각하면 아래와 같이 특정 mmio reg 등에 r/w 시의 order 및 mb 이전의 code가 확실히 수행되기를 위함이긴 했다. writel(reg, BIT(15)); wmb(); * reg 의 15번 bit를 set하고 이후의 작업을 수행 전 wmb 를 통한 order를 설정. writel(mmaped_reg, BIT(15)); mb(); // generic type * mapping 된 reg의 14번.. 2023. 4. 19.
728x90
반응형