728x90
📢 c++ 코드를 보는데 표준 문법이 아닌 것들(__attribute__, __builtin_xx ...)이 보여 무엇인지 알아봤어요
🧐 왜 사용하지?
부족한 표준 언어(c/c++)의 디테일을 보완해주는 기능이에요
표준 언어(c/c++)가 제공하지 못하는 "의도 명확화, 시스템 제어, 최적화"를 가능하게 해주죠
__builtin_xx 가 내장 함수(Builtin Function), 나머지는 컴파일러 확장(Compiler Extension)이에요
💻 어떤 상황에서 주로 쓰나?
위쪽에 있을수록 더 빈번하게 사용돼요
| 분류 | 대표 키워드 | 용도 | 사용 이유 (목적) |
| ① 최적화 힌트 | __builtin_expect, __restrict__, |
CPU 분기 예측 / 메모리 alias 최소화 | 성능 튜닝 및 병렬 최적화 (예: 루프 안 조건 분기) |
| ② 함수 속성 제어 | __attribute__((noreturn)), __attribute__((interrupt)), __noreturn__ |
함수 성격 명시 | 컴파일러 최적화 유도 + 경고 제거 + ISR 정의 등 |
| ③ 메모리 제어 / 위치 지정 | __attribute__((section)), __attribute__((aligned)), __attribute__((used)) |
함수·변수의 섹션 배치 및 정렬 | 부트로더, 메모리 맵, DMA 연계에서 중요 |
| ④ 하드웨어 직접 접근 / 인라인 어셈블리 | __asm__, asm volatile, __volatile__ |
특수 레지스터 접근, 명령어 직접 삽입 | 드라이버, context switch, IRQ 제어 |
| ⑤ 구조체 정렬 제어 | __packed__, __aligned__ |
구조체 크기 최적화, 하드웨어 맵핑 | 패딩 제거, 하드웨어 레지스터 대응 |
| ⑥ 기본 함수 대체/우선순위 설정 | __attribute__((weak)), __attribute__((alias)) |
약한 심볼 정의, 기본 구현 제공 | 링크 타임에 override 허용 (ISR default 등) |
| ⑦ 컴파일 타임 판단 / 상수 조건 처리 | __builtin_constant_p, __builtin_is_constant_evaluated() |
상수 여부 판별 | 매크로 조건 분기, constexpr 조건 제어 |
| ⑧ 프로그램 종료/중단 유도 | __builtin_trap(), __builtin_unreachable() |
예외 발생, undefined instruction | 안전 시스템의 비상 종료, static analyzer 보조 |
| ⑨ 인라인 제어 / 호출 방식 변경 | __inline__, __attribute__((always_inline)), __attribute__((noinline)) |
인라인 여부 강제 | 코드 사이즈 제어, 호출 오버헤드 튜닝 |
| ⑩ 함수 호출 방식/인자 전달 방식 지정 | __attribute__((fastcall)), __attribute__((cdecl)) |
함수 호출 규약 변경 | 특수 ABI에 맞춤, 인터럽트 호출 속도 최적화 |
| ⑪ C/C++ 링커 인터페이스 | extern "C" | 이름 맹글링 제거 | C 함수와 C++ 함수의 상호 운용성 확보 |
| ⑫ 분석 도구 힌트 / 경고 억제 | __attribute__((unused)), __attribute__((nonnull)) |
사용되지 않음 경고 제거, 정적 분석 힌트 | Lint, Polyspace, MISRA 대응에 유용 |
이렇게 컴파일러 확장과 내장 함수는 표준 언어의 부족함을 보완해주는 실전 개발 무기에요!
728x90
'TIL > 2025' 카테고리의 다른 글
| 링커 스크립트 분석 5단계 (0) | 2025.04.24 |
|---|---|
| 주요 Compile Extension & Builtin Function 예시를 알아보자 (1) | 2025.04.23 |
| 티스토리 기본 에디터에 inline code 추가 하기 (0) | 2025.04.21 |
| Tistory 코드 블럭 highlighting & 복사 버튼 추가하기 (0) | 2025.04.21 |
| man-month? 맨먼스? 업무 공수 측정 단위 알아보기 (0) | 2025.04.21 |