@c This file is part of the GNU gettext manual.
@c Copyright (C) 1995-2020 Free Software Foundation, Inc.
@c See the file gettext.texi for copying conditions.

@node C
@subsection C, C++, Objective C
@cindex C and C-like languages

@table @asis
@item RPMs
gcc, gpp, gobjc, glibc, gettext

@item Ubuntu packages
gcc, g++, gobjc, libc6-dev, libasprintf-dev

@item File extension
For C: @code{c}, @code{h}.
@*For C++: @code{C}, @code{c++}, @code{cc}, @code{cxx}, @code{cpp}, @code{hpp}.
@*For Objective C: @code{m}.

@item String syntax
@code{"abc"}

@item gettext shorthand
@code{_("abc")}

@item gettext/ngettext functions
@code{gettext}, @code{dgettext}, @code{dcgettext}, @code{ngettext},
@code{dngettext}, @code{dcngettext}

@item textdomain
@code{textdomain} function

@item bindtextdomain
@code{bindtextdomain} and @code{wbindtextdomain} functions

@item setlocale
Programmer must call @code{setlocale (LC_ALL, "")}

@item Prerequisite
@code{#include <libintl.h>}
@*@code{#include <locale.h>}
@*@code{#define _(string) gettext (string)}

@item Use or emulate GNU gettext
Use

@item Extractor
@code{xgettext -k_}

@item Formatting with positions
@code{fprintf "%2$d %1$d"}
@*In C++: @code{autosprintf "%2$d %1$d"}
(@pxref{Top, , Introduction, autosprintf, GNU autosprintf})

@item Portability
autoconf (gettext.m4) and #if ENABLE_NLS

@item po-mode marking
yes
@end table

The following examples are available in the @file{examples} directory:
@code{hello-c}, @code{hello-c-gnome}, @code{hello-c++}, @code{hello-c++-qt}, 
@code{hello-c++-kde}, @code{hello-c++-gnome}, @code{hello-c++-wxwidgets},
@code{hello-objc}, @code{hello-objc-gnustep}, @code{hello-objc-gnome}.
