<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Conditional directives</title><link>https://sourceforge.net/p/typp/wiki/Conditional%2520directives/</link><description>Recent changes to Conditional directives</description><atom:link href="https://sourceforge.net/p/typp/wiki/Conditional%20directives/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 07 Jan 2016 11:48:22 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/typp/wiki/Conditional%20directives/feed" rel="self" type="application/rss+xml"/><item><title>Conditional directives modified by Cyder</title><link>https://sourceforge.net/p/typp/wiki/Conditional%2520directives/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;strong&gt;Conditional Directives&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Function: &lt;code&gt;tpp.c TPPLexer_Next&lt;/code&gt;&lt;br/&gt;
Function: &lt;code&gt;tpp.c TPPLexer_EvalConst&lt;/code&gt;&lt;br/&gt;
Function: &lt;code&gt;tpp.c TPPLexer_EvalConst1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The c11 standard defines a variety of directives, to control what code is visible to the compiler after preprocessing is done. TPP implements all of them with only minor additions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;#if&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#elif&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#else&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#endif&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#ifdef&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#ifndef&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Conditional expressions that follow &lt;code&gt;#if&lt;/code&gt; and &lt;code&gt;#elif&lt;/code&gt; follow the obvious rules and allow the use of all of the c operators. The internal value used for evaluating the expression is usually a 64-bit integer (but no guaranties are given on that).&lt;/p&gt;
&lt;p&gt;Supported operators are (in precedence order):&lt;br/&gt;
1. &lt;code&gt;,&lt;/code&gt; (comma operator: only available, when evaluating using &lt;code&gt;TPPLexer_EvalConst&lt;/code&gt;)&lt;br/&gt;
2. &lt;code&gt;?&lt;/code&gt; (Conditional operator)&lt;br/&gt;
3. &lt;code&gt;||&lt;/code&gt; (Logical or)&lt;br/&gt;
4. &lt;code&gt;^^&lt;/code&gt; (Extension: Logical xor)&lt;br/&gt;
5. &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; (Logical and)&lt;br/&gt;
6. &lt;code&gt;|&lt;/code&gt; (Or)&lt;br/&gt;
7. &lt;code&gt;^&lt;/code&gt; (Xor)&lt;br/&gt;
8. &lt;code&gt;&amp;amp;&lt;/code&gt; (And)&lt;br/&gt;
9. &lt;code&gt;==&lt;/code&gt; (Equal) &lt;code&gt;!=&lt;/code&gt; (Not equal)&lt;br/&gt;
10. &lt;code&gt;&amp;lt;&lt;/code&gt; (Lower than) &lt;code&gt;&amp;lt;=&lt;/code&gt; (Lower equal) &lt;code&gt;&amp;gt;&lt;/code&gt; (Greater than) &lt;code&gt;&amp;gt;=&lt;/code&gt; (Greater equal)&lt;br/&gt;
11. &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; (Shift left) &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; (Shift right)&lt;br/&gt;
12. &lt;code&gt;+&lt;/code&gt; (Plus) &lt;code&gt;-&lt;/code&gt; (Minus)&lt;br/&gt;
13. &lt;code&gt;*&lt;/code&gt; (Multiply) &lt;code&gt;/&lt;/code&gt; (Divide) &lt;code&gt;%&lt;/code&gt; (Modulo)&lt;br/&gt;
14. &lt;code&gt;+&lt;/code&gt; (Unary plus) &lt;code&gt;-&lt;/code&gt; (Unary minus) &lt;code&gt;!&lt;/code&gt; (Logical not) &lt;code&gt;~&lt;/code&gt; (Complement) &lt;code&gt;&amp;lt;int&amp;gt;&lt;/code&gt; (Unary constant) &lt;code&gt;(...)&lt;/code&gt; (Parenthesis)&lt;/p&gt;
&lt;p&gt;Check: logical xor: &lt;code&gt;#if __has_feature(tpp_token_lxor) || __has_extension(tpp_token_lxor)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Directives may not cross multiple files and a warning is emitted, if not all #if-blocks are closed at the end of a file.&lt;/p&gt;
&lt;p&gt;The following example shows the different directives working together:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#if 10+20 == 30&lt;/span&gt;
&lt;span class="c1"&gt;// Enabled&lt;/span&gt;
&lt;span class="cp"&gt;#elif 1&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#else&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cp"&gt;#if 49*10 == 100&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#elif 42 != 42&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#elif 42 == 42&lt;/span&gt;
&lt;span class="c1"&gt;// Enabled&lt;/span&gt;
&lt;span class="cp"&gt;#else&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cp"&gt;#define foobar&lt;/span&gt;

&lt;span class="cp"&gt;#if defined(foobar)&lt;/span&gt;
&lt;span class="c1"&gt;// Enabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cp"&gt;#if !defined foobar&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#elif defined foobar&lt;/span&gt;
&lt;span class="c1"&gt;// Enabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cp"&gt;#ifdef foobar&lt;/span&gt;
&lt;span class="c1"&gt;// Enabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cp"&gt;#ifndef foobar&lt;/span&gt;
&lt;span class="c1"&gt;// Disabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cp"&gt;#if 1&lt;/span&gt;
&lt;span class="cp"&gt;#ifdef foobar&lt;/span&gt;
&lt;span class="cp"&gt;#ifndef foobar2&lt;/span&gt;
&lt;span class="c1"&gt;// Enabled&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Cyder</dc:creator><pubDate>Thu, 07 Jan 2016 11:48:22 -0000</pubDate><guid>https://sourceforge.net93e898f11b0ee6095691750d62020191ee22ab76</guid></item></channel></rss>