C

C는 C++의 조상이며 여전히 저수준 시스템의 공용어입니다: 운영체제 커널, 디바이스 드라이버, 센서 펌웨어, 그리고 많은 임베디드 런타임이 C로 작성됩니다. 완전한 SLAM 시스템을 C로 통째로 작성하는 일은 드물지만, C 코드를 끊임없이 읽고 인터페이싱하게 됩니다.

배워야 할 것

#include <stdlib.h>

typedef struct { float x, y, z; } Point3;

Point3* cloud_alloc(size_t n) {
    return (Point3*)malloc(n * sizeof(Point3));  /* must free() later */
}

/* Callback registration, the universal sensor-SDK pattern */
typedef void (*frame_cb)(const unsigned char* data, int w, int h, void* user);
void sensor_set_callback(frame_cb cb, void* user_data);

C와 C++ 연결하기

C++ 컴파일러는 타입을 인코딩하기 위해 함수 이름을 *맹글링(mangle)*하지만, C는 그렇지 않습니다. extern "C"는 C++ 컴파일러에게 C 링키지를 사용하도록 지시하여 두 세계가 서로를 호출할 수 있게 합니다:

extern "C" {
#include "vendor_camera_sdk.h"   // C header from the sensor vendor
}

// C++ wrapper: RAII around the C API's open/close pair
class Camera {
public:
    Camera()  { handle_ = vendor_cam_open(); }
    ~Camera() { vendor_cam_close(handle_); }
private:
    vendor_cam_handle* handle_;
};

이러한 래퍼 패턴 --- 내부는 C API, 외부는 RAII --- 는 잘 설계된 SLAM 코드베이스가 C 인터페이스의 불안전성을 격리하는 방법입니다.

C가 SLAM 작업에서 나타나는 곳

흔한 함정

SLAM에서의 의미

실시간 SLAM은 하드웨어와 밀접하게 맞닿아 있으며, 여러분의 알고리즘과 센서, OS, 가속기 사이의 경계는 거의 항상 C 인터페이스입니다. C를 유창하게 읽고 --- 수동 메모리 관리를 이해하는 것 --- 은 여러분을 더 나은 C++ 프로그래머로 만들고, 드라이버 콜백에서 번들 조정까지 전체 스택을 디버깅할 수 있게 해줍니다. 대부분의 학습자는 C를 별도의 심층 학습 대상이 아니라 C++ 학습의 동반자로 다루면 충분합니다.

관련 문서