Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
C preprocessor
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
===Operators=== The preprocessor is capable of interpreting operators and evaluating very basic expressions, such as integer constants, arithmetic operators, comparison operators, logical operators, bitwise operations, the <code>defined</code> operator, and the <code>#</code> stringificafion operator. This allows the preprocessor to make evaluations such as: <syntaxhighlight lang="cpp"> #if X == 10 // if X equals 10, the preprocessor sees #if 10 == 10 </syntaxhighlight> ====Defined operator==== While the '''defined operator''', denoted by <code>defined</code> is not a directive in its own right, if it is read within a directive, it is interpreted by the preprocessor and determines whether a macro has been defined. The following are both accepted ways of invoking the <code>defined</code> operator. <syntaxhighlight lang="cpp"> #if defined(MY_MACRO) #if defined MY_MACRO </syntaxhighlight> ====Token stringification operator==== The '''stringification operator''' (a.k.a. stringizing operator), denoted by <code>#</code> converts a token into a [[string literal]], escaping any quotes or backslashes as needed. For definition: <syntaxhighlight lang="cpp"> #define str(s) #s </syntaxhighlight> <code>str(\n)</code> expands to <code>"\n"</code> and <code>str(p = "foo\n";)</code> expands to <code>"p = \"foo\\n\";"</code>. If stringification of the expansion of a macro argument is desired, two levels of macros must be used. For definition: <syntaxhighlight lang="cpp"> #define xstr(s) str(s) #define str(s) #s #define foo 4 </syntaxhighlight> <code>str(foo)</code> expands to "foo" and <code>xstr(foo)</code> expands to "4". A macro argument cannot be combined with additional text and then stringified. However, a series of adjacent string literals and stringified arguments, also string literals, are concatenated by the C compiler. ====Token concatenation==== The '''token pasting operator''', denoted by <code>##</code>, concatenates two tokens into one. For definition: <syntaxhighlight lang="cpp"> #define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t </syntaxhighlight> <code>DECLARE_STRUCT_TYPE(g_object)</code> expands to <code>typedef struct g_object_s g_object_t</code>.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)