The C API is developed as an additional API on top of the existing C++ API. They don't differ in many ways. This page lists common differences and dealing with them.
Namespaces and classes
Where a namespace or class name may appear, the C++ ::
access operator is replaced by _, as C doesn't have support
for namespaces and classes.
For example,
UImGui::Window::Platform::setWindowAlwaysOnTop() will
become UImGui_Window_Platform_setWindowAlwaysOnTop() in the
C API.
FVector,
String and FString
The C API defines the UImGui_FVector2,
UImGui_FVector and UImGui_FVector4 types.
These types define geometrical vectors of floats. The C++
API actually uses a typedef to FVector2,
FVector and FVector4 from the C types, under
the UImGui namespace.
The FString type is not available in the C API, as
templates are not a feature of C. Because of this, we're forced to only
use UImGui_String for C string representations and
char* for mutable character arrays.
UImGui_String is defined as String in the
UImGui namespace when using the C++ API
Classes/structs with member functions
Some classes/structs with member functions may have a custom data-only C adapter struct. This struct is then passed to the C alternatives of the same member functions to manipulate the data. Here is a C++ example:
struct doStuffWithMembers
{
    size_t num1;
    size_t num2;
    void f();
    void g();
};This struct can then be converted to a C one like this:
struct doStuffWithMembersC
{
    size_t num1;
    size_t num2;
};
void doStuffWithMembersC_f(doStuffWithMembersC* data);
void doStuffWithMembersC_g(doStuffWithMembersC* data);Now, using the struct in both the C++ and C way:
// C++
doStuffWithMembers cppStruct = { 0, 1 };
cppStruct.f();
cppStruct.g();
// C
doStuffWithMembersC cStruct = { 0, 1 };
doStuffWithMembersC_f(&cStruct);
doStuffWithMembersC_g(&cStruct)This is a really common pattern used in places like the
Texture and Monitor C APIs.
Dear imgui C API
The C API for dear imgui we use is based on dear_bindings. Differences in code formatting are listed here.
To use the dear imgui C API, include
#include <cimgui/cimgui.h> in your code.
Caution
The C++ and C imgui APIs should NOT be included together, as that will cause hundreds of type redefinition compiler errors.
Dear imgui C modules API
Some dear imgui widget modules also have a C API. Refer to individual module pages for further instructions.
- Home
 - Beginner content
- Install guide
 - Creating and using the UI components
 - The Instance
 - The Init Info struct
 - Building better titlebar menus
 - Textures
 - Logging
 - Unicode support
 - Additional features
 - Client-side bar
 - Custom type definitions
 - Memory management
 - C API development
 - Config files and Folders
 - Interfaces
 - Internal Event safety
 - Customising the build system
 - Modules system
 - Collaborating with others
 
 - Advanced content
- Loading dynamic libraries at runtime
 - Understanding the library layout
 - Compilation mode modifiers
 - Supporting plugins
 - Production export and deployment
 - OS integration tips
 - Targeting WASM
 - Using a custom rendering engine:
 - Using a custom windowing backend:
 
 - Developer and contributor resources
 - Misc