• Home
  • Integrations
  • SDKs
  • Guides
  • API docs
No results for ""
EXPAND ALL

EDIT ON GITHUB

C/C++ SDK reference (client-side)

Read time: 2 minutes
Last edited: Aug 02, 2022

Overview

This topic documents how to get started with the client-side C/C++ SDK, and links to reference information on all of the supported features.

SDK quick links

LaunchDarkly's SDKs are open source. In addition to this reference guide, we provide source, API reference documentation, and sample applications:

ResourceLocation
SDK API documentationSDK API docs
GitHub repositoryc-client-sdk
Sample applicationshello-c-client (C)
hello-cpp-client (C++)
Published moduleNone

Prerequisites

To use the C/C++ SDK, you must have the following prerequisites:

  • Windows or a POSIX environment (Linux, OSX, BSD)
  • The networking library libcurl
  • libpthread, if you are using a POSIX environment
For use in mobile, desktop, and embedded client applications only

This SDK is intended for use in single-user mobile, desktop, and embedded applications. If you have a C/C++ application and want to set up LaunchDarkly on the server-side, read the server-side C/C++ SDK reference.

To learn more about LaunchDarkly's different SDK types, read Client-side and server-side SDKs.

Configuring the SDK

The following sections explain how to install and configure the SDK, and then to verify its connection to LaunchDarkly by fetching flag configuration information for a specific user.

Installing the SDK

Here's how to install the SDK:

  1. Clone the GitHub repository or download a release archive from the GitHub Releases page.
  2. Install the SDK locally.
  • If you use cmake, the build system will expect that libcurl, and libpthread if you are on POSIX, exist on the system. The cmake configuration exports the target ldclientapi.
  • If you don't use cmake and you cannot use LaunchDarkly's artifacts, use cmake install to install the SDK in directory you choose. This copies the required headers, and binaries equivalent to LaunchDarkly's release bundles.
  1. Build the C++ wrapper, which is not included in the release binaries. Copy the header and source files and add them to your own build system.
  2. Include the LaunchDarkly SDK headers:
#include <launchdarkly/api.h>
  1. Create a single shared instance of LDClient.
  2. Specify your mobile key to authorize your application to connect to a particular environment within LaunchDarkly:
unsigned int maxwaitmilliseconds = 10 * 1000;
struct LDConfig *config = LDConfigNew("YOUR_MOBILE_KEY");
struct LDUser *user = LDUserNew("YOUR_USER_KEY");
struct LDClient *client = LDClientInit(config, user, maxwaitmilliseconds);
LDClient must be a singleton

It's important to make LDClient a singleton. The client instance maintains internal state that allows LaunchDarkly to serve feature flags without making any remote requests. Do not instantiate a new client with every request.

Your environment's mobile key is available in the Projects tab of your account settings page.

Never embed a server-side SDK key into a client-side application

Mobile keys are not secret and you can expose them in your client-side code without risk. However, never embed a server-side SDK key into a client-side application.

Fetching flag configuration

Making feature flags available to this SDK

You must make feature flags available to mobile SDKs before the SDK can evaluate those flags. If an SDK tries to evaluate a feature flag that is not available, the user will receive the default value for that flag.

To make a flag available to this SDK, check the SDKs using Mobile key checkbox during flag creation, or on the flag's Settings tab. To make all of a project's flags available to this SDK by default, check the SDKs using Mobile key checkbox in your project Settings.

Here's how to verify the SDK is configured correctly by fetching flag configuration data from LaunchDarkly:

  1. Call LDClientInit to initiate a remote call to the LaunchDarkly service. This fetches the feature flag settings for a given user.

    This call blocks up to the time defined by maxwaitmilliseconds. If you request a feature flag before initialization completes, you will receive the default flag value. If you want to wait for client initialization, register a callback:

void initCallback(LDStatus status)
{
if (status == LDStatusInitialized) {
printf("Completed LaunchDarkly client initialization");
}
}
LDSetClientStatusCallback(initCallback);
  1. Use client to check which variation a specific user should receive for a certain feature flag:
bool show_feature = LDBoolVariation(client, "YOUR_FLAG_KEY", false);
if (show_feature) {
// Application code to show the feature
} else {
// The code to run if the feature is off
}

Shutting down

Shut down the client when your application terminates. To learn more, read Shutting down.

Supported features

This SDK supports the following features: