<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>C言語のマクロ</title>
    <description>C言語のマクロについてです。C言語のマクロには落とし穴が多いので、マクロをマスターして引っかからないようにしましょう。そしてC言語の達人になってください。</description>
    <link>https://macro.gjpw.net/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>INSIDE 範囲内判定</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	INSIDE
	範囲内判定

	＜概要＞
	指定の範囲内かを判定する
	＜返却＞
	範囲内なら真。範囲外なら偽。
	＜引数＞
	x:判定対象
	a,b:範囲(a&amp;lt;=bであること)
	＜備考＞
	引数の複数回評価有。
*/
#define INSIDE(x,a,b) ((x) &amp;gt;= a &amp;&amp; (x) &amp;lt;= b)
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/inside%20%E7%AF%84%E5%9B%B2%E5%86%85%E5%88%A4%E5%AE%9A</link> 
    </item>
    <item>
      <title>IN4 集合要素判定</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	IN4
	集合要素判定

	＜概要＞
	指定の集合に属するかを判定する
	＜返却＞
	要素なら真。要素でなければ偽。
	＜引数＞
	x:判定対象
	a〜d:集合要素
	＜備考＞
	引数の複数回評価有。
*/
#define IN2(x,a,b) ((x) == a || (x) == b)
#define IN3(x,a,b,c) ((x) == a || (x) == b || (x) == c)
#define IN4(x,a,b,c,d) ((x) == a || (x) == b || (x) == c || (x) == d)
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/in4%20%E9%9B%86%E5%90%88%E8%A6%81%E7%B4%A0%E5%88%A4%E5%AE%9A</link> 
    </item>
    <item>
      <title>BEEP 警告音を鳴らす</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	BEEP
	警告音を鳴らす

	＜概要＞
	警告音を鳴らす
	＜返却＞
	出力文字数。失敗の場合EOF。
	＜引数＞
	なし
	＜備考＞
	特になし
*/
#define BEEP() (fputc('\a', stderr))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/beep%20%E8%AD%A6%E5%91%8A%E9%9F%B3%E3%82%92%E9%B3%B4%E3%82%89%E3%81%99</link> 
    </item>
    <item>
      <title>MEMBER_SIZE 構造体メンバのサイズ取得</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	MEMBER_SIZE
	構造体メンバのサイズ取得

	＜概要＞
	指定された構造体のメンバのサイズを返す
	＜返却＞
	指定された構造体のメンバのサイズ
	＜引数＞
	type:構造体
	member:構造体のメンバ
	＜備考＞
	特になし
*/
#define MEMBER_SIZE(type, member) (sizeof(((type*)0)-&amp;gt;member))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/member_size%20%E6%A7%8B%E9%80%A0%E4%BD%93%E3%83%A1%E3%83%B3%E3%83%90%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E5%8F%96%E5%BE%97</link> 
    </item>
    <item>
      <title>DECREMENT デクリメント</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	DECREMENT
	デクリメント

	＜概要＞
	引数から1を引く。0なら指定値に戻す。
	＜返却＞
	1引かれた数
	＜引数＞
	x:デクリメント対象値
	max:最大値
	＜備考＞
	返却値はmax未満。
	1引いた後の値が負ならmax-1を返却。
*/
#define DECREMENT(x, max)	\
	(((x) = (x) - 1) &amp;lt; 0 ? ((x) = (max) - 1) : (x))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/decrement%20%E3%83%87%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88</link> 
    </item>
    <item>
      <title>INCREMENT インクリメント</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	INCREMENT
	インクリメント

	＜概要＞
	引数に1を足す。指定値になったら0にする。
	＜返却＞
	1足された数
	＜引数＞
	x:インクリメント対象値
	max:最大値
	＜備考＞
	返却値はmaxにはならない。
	1足した後の値がmaxなら0を返却。
*/
#define INCREMENT(x, max) ((x) = ((x) + 1) % (max))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/increment%20%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88</link> 
    </item>
    <item>
      <title>DEBUG_PRINT デバッグ用出力</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	DEBUG_PRINT
	デバッグ用出力

	＜概要＞
	指定のパラメータで標準エラー出力に出力する
	＜返却＞
	書き出された文字数。失敗なら負の値。
	＜引数＞
	...:出力書式と内容
	＜備考＞
	出力方法はprintfと同じ。
	マクロの可変引数はC99より。
*/
#define DEBUG_PRINT(...) (fprintf(stderr, __VA_ARGS__))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/debug_print%20%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E7%94%A8%E5%87%BA%E5%8A%9B</link> 
    </item>
    <item>
      <title>MIN3 最小値取得</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	MIN3
	最小値取得

	＜概要＞
	指定された3引数のうちの最小のものを返す
	＜返却＞
	最小値
	＜引数＞
	a,b,c:最小値を選ぶ対象
	＜備考＞
	引数の複数回評価有。
*/
#define MIN2(a, b) ((a) &amp;lt; (b) ? (a) : (b))
#define MIN3(a, b, c) ((a) &amp;lt; (MIN2(b, c)) ? (a) : (MIN2(b, c)))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/min3%20%E6%9C%80%E5%B0%8F%E5%80%A4%E5%8F%96%E5%BE%97</link> 
    </item>
    <item>
      <title>MAX3 最大値取得</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	MAX3
	最大値取得

	＜概要＞
	指定された3引数のうちの最大のものを返す
	＜返却＞
	最大値
	＜引数＞
	a,b,c:最大値を選ぶ対象
	＜備考＞
	引数の複数回評価有。
*/
#define MAX2(a, b) ((a) &amp;gt; (b) ? (a) : (b))
#define MAX3(a, b, c) ((a) &amp;gt; (MAX2(b, c)) ? (a) : (MAX2(b, c)))
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/max3%20%E6%9C%80%E5%A4%A7%E5%80%A4%E5%8F%96%E5%BE%97</link> 
    </item>
    <item>
      <title>CALC_CLOCK 処理時間表示</title>
      <description>&lt;pre&gt;&lt;code&gt;/*
	CALC_CLOCK
	処理時間表示

	＜概要＞
	ソースコードとループ回数を指定すると
	処理にかかったプロセッサ時間を表示する
	＜返却＞
	なし
	＜引数＞
	code:ソースコード
	n:ループ回数
	＜備考＞
	使用例:CALC_CLOCK(x = cos(x), 1000000UL);
*/
#define CALC_CLOCK(code, n) do {	\
	int i;	\
	clock_t t = clock();	\
	for (i=0;i&amp;lt;n;i++) { code; }	\
	printf(&quot;%d\n&quot;, clock() - t);	\
} while (0)
&lt;/code&gt;&lt;/pre&gt;</description> 
      <link>https://macro.gjpw.net/c%E8%A8%80%E8%AA%9E%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BE%8B/calc_clock%20%E5%87%A6%E7%90%86%E6%99%82%E9%96%93%E8%A1%A8%E7%A4%BA</link> 
    </item>

  </channel>
</rss>