hpprc/jawiki-books huggingface dataset:
Fortran/データ型

変数とデータの宣言は、すべての Fortran プログラムユニットの先頭で、実行可能な文の前に行わなければなりません。変数には、メモリ上のサイズを指定する kind があります。kindのパラメータは、コンパイラやプロセッサによって意味が異なる場合がありますので、ご使用のコンパイラのマニュアルで、どのようなkindがあるかを確認してください。
変数を宣言するにはいくつかの方法があります。最近のFortranでは、冗長かつ明示的に宣言するのが主流です。次の例では,kind が8の実数配列を宣言しています(ほとんどのコンパイラでは,これは8バイト長,すなわち倍精度を意味します)。
dimension属性は、タイプアウトするにはかなり長いですが、一行に複数の配列を宣言する場合には、より簡潔になるかもしれません。単一の変数を宣言する場合は、識別子の横に括弧をつけて次元を指定した方が簡潔になるかもしれません。
変数は代入に似た構文で初期化することもできます。
::は、古いバージョンのFortranとの下位互換性のためにオプションです。古いスタイルの宣言では、変数の種類を示すのに*を使います。
さらに、kindを完全に省略して、コンパイラーのデフォルトの種類を使用することもできます。
整数型は、符号付き整数値を格納します (すなわち、..., -3, -2, -1, 0, 1, 2, 3, ...)。ほとんどのコンパイラでは、デフォルトのkindでは、整数は4バイトサイズの短整数として格納されます(kind=4)。長整数は通常8バイトである(kind=8)。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dimension (dims)、private、value、external、protected、volatile、intenance (inout)です。
論理デ型は、ブーリアン値を格納し、.true.または.false.の値のみを格納できます。ほとんどのコンパイラのデフォルトの論理型はkind=4で、4バイトを占めます。したがって、論理はメモリの点では整数とよく似ていますが、一般的に整数と論理はほとんどの操作で互換性がありません。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dimension(dims)、private、value、external、protected、volatile、intent(inout)です。
実数型は、浮動小数点データを格納します。変数は、科学的な表記法である「仮数」と「指数」としてメモリに格納されます。ほとんどのコンパイラのデフォルトの実数型はkind=4で、4バイトで構成されています。この場合、24ビットが仮数に、8ビットが指数に使用されます。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dim dimension (dims)、private、value、external、protected、volatile、intenance (inout)です。
すべてのコンパイラは、低精度数と高精度数の少なくとも2種類の実数種類をサポートしています。しかし、規格ではこれらの精度をどのようなサイズにするかは規定されていません。ほとんどのコンパイラは、単精度には32ビット、倍精度には64ビットを使用しています。したがって、多くのコンパイラは、利用可能な高精度を使用するdouble precision実数データ型をサポートしています。しかし、移植性のためには、selected_real_kind組込み関数を使用して、変数の精度に必要なkindパラメータを選択する方がはるかに優れています。
数学では、複素数は実数部と虚数部を持つ。Fortranでの複素数は、実数のペア(実数部が先で、虚数部が後)として直角座標に格納されます。複素数のデフォルトのkindは、実数データ型のデフォルトのkindと常に同じです。つまり、kind=4の複素数変数は、kind=4の2つのリアルを含みます。kind=4のリアルが4バイトに相当する場合、デフォルトの複素数変数のサイズは8バイトになります。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dim dimension(dims)、private、value、external、protected、volatile、intent(inout)です。
すべての算術演算子はどちらか一方に複素数を取ることができます。Fortranは複素数の演算や虚数の特殊な規則を自動的に処理します。
エラーを起こす可能性のある関数呼び出しの使用には注意が必要です。例えば、実数-1.0の平方根を取ると、-1は実数の平方根の領域外であるため、エラーになります。複素数の平方根を取る (-1.0,0.0)は、-1が複素数平方根のドメイン内にあるので許される。
文字型は、文字列を格納します。キャラクタ変数のデフォルトの種類は通常1で、ASCII文字を表します。種類2は通常、ISO 10646規格の文字を表します。文字変数は、文字列の文字数を指定するkindに加えて、lenパラメータを持つという点でユニークです。通常、1つの文字はメモリ上で1バイトを占めます。これに加えて、文字データ型は配列にすることもできます。
古いスタイルの宣言では、kindパラメータはなく、長さパラメータのみです。
式の中に埋め込まれたデータは、リテラルまたは定数と呼ばれます。リテラルは、書き方によって特定のデータ型を持つことができます。例えば、以下の行では、値1は整数です。
以下の表は、リテラル定数の入力方法を示しています。
なお、複素数の括弧表記は、変数には使えません。例えば、(a, b)は無効です。実数の変数を複素数に変換するには、cmplx関数を使用する。
複素数と他の数値を含む表現は、複素数に昇格します。
定数リテラルは単なる無名データ(unnamed data)です。変数も定数になることができます。パラメータ定数は parameter 属性で宣言します。これらの変数は不変であり、宣言後に代入するとエラーになります。また、宣言時には必ず値を指定して初期化しなければなりません。
Fortran/形式と構造

古いバージョンのFORTRANでは、プログラムの形式に厳しいガイドラインがありました。Fortran 90ではこの制限が撤廃され、歴史的な「固定形式」のコードだけでなく、「自由形式」のコードも受け入れられるようになりました。
Fortran 90より前のソースコードは、明確に定義された「固定形式」に従っていました。コメントは1列目に'C'で示され、2~5列目は任意の数値文ラベルのために確保され、6列目の空白でない文字は現在の行が前の行からの続きであることを示し、7~72列目はプログラム文のために利用可能でした。73から80列目は無視され、しばしば行のシーケンス番号が含まれていました。空白行は許されません。このような厳格な形式は、Fortranがバッチ計算とパンチカード入力の時代に開発された結果です。パンチカードをカードリーダーにセットし、73~80列目でソートすれば、プログラムの順序を回復することができます。コンパイラベンダーは、この形式の拡張機能を提供していたが、移植性はほとんどなかった(例えば、タブ文字を6個のスペースと解釈するなど)。
列の位置は重要ですが、ホワイトスペースは重要ではありません。次のプログラムは、固定形式のFortranにおけるホワイトスペースの合法的な使用方法を示しています。
このコードは技術的には合法ですが、読みやすさを維持するために、キーワード、ラベル、データを区切るためにホワイトスペースを使用することが強く推奨されます。
FortranはASCII文字セットが標準化される前に開発され、伝統的にFORTRANコードは全て大文字で書かれてきました。変数名は6文字までとされていましたが、コンパイラベンダーによって拡張されることが多かったようです。
Fortran90以降のソースコードでは、固定列の形式を必要としません。この場合、コマンドはどの列からでも自由に開始できます。また、72カラムの制限も解除されました。これにより、インデントのためのスペースが大幅に増えました。
Fortranは大文字と小文字を区別しません。Fortranは通常、大文字のみをサポートするシステムで使用されていました。実際、この言語自体がFORTRAN(大文字)と呼ばれていました。完全に不要ではありますが、今でもFortranのコマンドをすべて大文字で入力する習慣があります。これは、モノクロのディスプレイや印刷で表示されるソースコードのキーワードを区別するのに便利です。最近では、シンタックスハイライトでこれを置き換えることができます。しかし、古いFORTRANコードと最新のソースコードを視覚的に区別するためには有効です。
空白や空行は、Fortran 90以降では通常問題になりません。例えば、program、function、subroutineのように、ステートメントキーワードとプログラムユニット識別子の間にホワイトスペースを必要とするステートメントもあります。
しかし、C、C++、Javaなどの他の多くの言語とは異なり、行区切り文字「;」は任意であるため、コードの各行はそれぞれの行にとどまることができます。ただし、コマンド区切り文字「;」の使用は推奨されません。
Fortranのプログラムはプログラム単位で構成されています。1つのソースコード・ファイルに複数のプログラム・ユニットを含めることができますが、各プログラム・ユニットを個別のソースコード・ファイルに入れるのが一般的です。最も基本的なプログラムユニットは一連のFortran文で構成され、最後にend文で締めくくられます。
実行可能なプログラムには、必ずメイン・プログラム・ユニットが必要です。例えば、以下は完全なコンパイルおよび実行可能なプログラムです。
しかし、メインのプログラムユニットであることを示すために、programステートメントを使用する方がはるかに明確です。
メインプログラムはセクションに分かれています。最初のセクションは、モジュールのuse文で構成されます。続いて、宣言されていない変数が暗黙的に型付けされるかどうかを制御するimplicit / implicit none文が続きます。続いて、変数、型、インターフェース、プロシージャを宣言する宣言セクションがあります。次にメインプログラムの実行文が来る。最後のセクションは、containsステートメントによって開始される内部サブプログラムです。
プログラムユニットはサブプログラムである場合もあります。プロシージャ(関数やサブルーチン)、ブロックデータ、モジュール、サブモジュールなどがあります。
次のコードは、メインプログラムと関数を示しています。インクリメント関数はメインプログラムの外部にあるため、メインプログラムの4行目に宣言が必要です。
とはいえ、関数のインターフェイスは暗黙的なままです。外部プロシージャを明示的に宣言するには、外部プロシージャの入力と出力をすべて宣言するインターフェイスを使用することができます。この場合、メインプログラムは次のようになります。
内部サブプログラムは、親プログラムユニットの一部であるため、明示的なインタフェースや宣言を必要としません。サブプログラムがプログラムユニットのcontainsセクションに含まれている場合、そのサブプログラムは内部的なものとなります。
無名関数

コンピュータ・プログラミングにおいて、無名関数とは、識別子に束縛されていない関数定義のことです。 無名関数は、高階関数に渡される引数や、関数を返す必要のある高階関数の結果を返すために使われます。 無名関数は、関数型プログラミング言語や第一級関数を持つ他の言語ではどこにでもあり、他のデータ型に対するリテラルと同様に、関数型に対して同じ役割を果たします。
無名関数は、電子計算機が登場する以前の1936年にアロンゾ・チャーチが発明し、すべての関数が無名であるラムダ計算に由来しています。 いくつかのプログラミング言語では、無名関数はキーワードlambdaを用いて導入され、無名関数はしばしば lambdas または lambda abstractions と呼ばれます。 無名関数は、1958年のLisp以来、プログラミング言語の特徴となっており、最近のプログラミング言語では無名関数をサポートするものが増えている。
百人一首

百人一首は藤原定家による秀歌撰を基にしてつくられたかるたの一種です。この編纂を京都小倉山で編纂したという由来から小倉百人一首ともいいます。
百人一首の内容などについてはw:百人一首に譲ります。ここでは、百人一首のかるたを用いたゲームについて解説します。
百人一首のカルタを上達するには歌を覚えるのが鉄則です。しかし、いっぺんにすべてを暗記するのは不可能です。効率よく覚えるための方法の一つが決まり字を覚えることです。
決まり字の基本です。以下の歌は最初の一文字で歌が分かるものです。6つありますが、その最初の文字をとった「む・す・め・ふ・さ・ほ・せ(娘、総干せ)」と覚えましょう。
普通のカルタ取りとほぼ同じです。
まず、読み手を一人選び、読み手が読み札をとります。そして、取り札を適当に重ならないようにして散らします。このとき、なるべく公平になるように取り札の頭はバラバラな向きになるようにします。また、お手付きのペナルティも決めておくといいでしょう。一般的には一回休みが多いようです。
準備ができたら、読み手が歌を読みます。取り手はわかった時点で取り札をとりましょう。同時に何人もが同じ札を押さえた場合には、手が一番下にある人のものです。
慣れていない場合、なかなか札をとれないかもしれません。その時には、読み手が下の句を繰り返し読むようにしましょう。
こうして、取り札がすべてなくなったら終了です。順位はとった札の多い順となります。
このゲームでは読み札(絵札)のみを用います。百人一首の内容を覚える必要はありません。
駆け引きなどの「実力」はほとんど必要なく、ほぼ運のみのゲームです。しかし、それゆえに参加者同士の知的・身体的な差に関係なく遊べるので、年齢差の大きいグループや、高齢者、外国人などの日本語の読めない人でも問題なく遊べます。また、ルールがシンプルなのにシーソーゲームとなるために、意外に盛り上がりやすいです。そのため、打ち解けるためのちょっとした遊びにも向いています。ほか、勝ち負けに強くこだわりすぎる子どもに、負けを受け入れるためのソーシャルスキルトレーニングの一環としても向いています。
もちろん、百人一首の歌の内容などにも興味を広げることもできます。
坊主めくりの特徴でもあり、魅力でもあるのはローカルルールが非常に多いことです。そのため、参加者同士のルール確認はしておきましょう。ここでは、よく知られているルールを紹介します。
また、慣れてきたらいろいろとアレンジをしても面白いですよ。
ローカルルールの代表が蝉丸札です。蝉丸札の扱いについては以下のようなルールがあります。
このように、ルールが最も多様なので、蝉丸の扱いは真っ先に確認しておきましょう。
天智天皇、持統天皇、陽成院、光孝天皇、三条院、崇徳院、後鳥羽院、順徳院の8人は天皇札と呼ばれることがあります。この中でも、天智天皇札と持統天皇札は特別扱いされることがあります。
弓を持っている人物を武官札(または弓持ち札)と呼ぶことがあります。該当するのは、参議篁、在原業平朝臣、藤原敏行朝臣、壬生忠岑、参議等、壬生忠見、藤原道信朝臣、藤原基俊の8人ですが、メーカーによっては弓を持っていない場合があります(特に壬生忠見札は弓を持っていないことが多い)。プレイ前に確認しておきましょう。
武官札の扱いには以下のようなものがあります。
などなど。
以上のルールを色々と組み合わせて遊んでみてください。
Minecraft

Minecraft(マインクラフト)は、Mojang studiosが開発しているサンドボックスゲームです。Minecraftは、ブロックでできた世界に自由に建造物を作ったり、自由に冒険したりするゲームです。Minecraftは、2009年に開発が始まり、2011年11月18日に正式版がリリースされました。
ゲームの流れとしては、サバイバルモードでは、世界を冒険してブロックやアイテムを集めていくというものです。最終的にはポータルを使ってジ・エンドへ行き、そこで飛行しているボスである、エンダードラゴンを倒すことが目標にされることが多いですが、基本的に終わりはありません。
Minecraft/ゲームモード

マインクラフトには、以下のようなゲームモードがあります。
クリエイティブモードは、自由に飛行したり、建築物を作ったりできるモードです。クリエイティブモードには、サバイバルモードのように体力がなく、基本的には死亡することはありません。ブロックやアイテムは、無限に使うことができます。
サバイバルモードは、冒険したり、モンスターと戦ったりするモードです。体力ゲージがあり、モンスターに攻撃されたり、高い所から落下したりして、体力ゲージがなくなると死亡します。体力ゲージは、食べ物を食べることで回復します。
ハードコアモードは、サバイバルモードと同じようにプレイできる。しかし、ゲームの難易度がハードであり、さらに一度でも死亡すると、スペクテイターモードで復活するか、ワールドを強制的に削除しなければならなくなります。
サバイバルモードと同じく体力ゲージがあり、なくなると死亡するモードです。しかし、サバイバルモードと異なり、ブロックを破壊する際にプレイヤーの手で破壊できず、Java版ではCanDestroy NBTタグがある道具でしか破壊できない。Bedrock版の場合は設置や破壊の際に、can_destroy NBTタグや、can_place_on NBTタグが必要となります。
Java版1.8で追加された、プレイヤーが飛行状態になって、ブロックやエンティティをすり抜けて、移動することができるモードです。エンティティを左クリックすると、そのエンティティの視点に切り替わり、特定のエンティティ(クリーパー、クモ、洞窟グモ、エンダーマン)では、見える視点が変化します。ハードコアモードでは、死亡した際にこのモードで復活できます。
Minecraft/村

村は、オーバーワールドで生成される建造物の一つです。

村は、平原、砂漠、サバンナ、タイガ、ツンドラに生成されます。村には、小さな家や大きな家、畑、肉屋、教会などの建物が生成され、さまざまな職業の村人が住んでいます。また、アイアンゴーレムやネコがスポーンします。
Java版1.14から、バイオームごとに村の建物の外見や構造が、変わるようになりました。
ゾンビの村は、2%の確率で生成されます。この村には、普通の村人は住んでおらず、村人ゾンビがスポーンします。また建物も、丸石が苔むしているなどの違いがあります。
Java版1.14で実装された、邪悪な村人が村を襲撃するイベントです。不吉な予感のステータス効果がある際に、村に入ると襲撃イベントが開始される。
Minecraft/バイオーム

マインクラフトの世界では、多数のバイオームによって構成されています。以下は、オーバーワールド、ネザー、ジ・エンドにそれぞれ生成される、バイオームの一覧です。
Java版1.13からは、海に新しいバイオームが追加されました。また、一部のバイオームの名前が変更されました。
Java版1.16からは、ネザーにバイオームの種類が増加しました。
Java版1.18からは、洞窟に新しいバイオームの種類が、追加される予定です。
ID:1
木が少なく、草がたくさん生えたバイオームです。ウマが出現することがあります。村が生成されることがある、バイオームの一つです。
Java版1.15から、ミツバチの巣が生成されることがあります。
ID:129
ヒマワリがたくさん生えた、平原バイオームです。
ID:2
砂に覆われ、所々にサボテンが生えているバイオームです。動物はウサギしか出現せず、このバイオームでは、雨が降りません。村が生成されることがあるほか、砂漠の寺院が、生成されることもあります。
モンスターである、ハスクが出現します。
ID:17
砂漠バイオームの丘陵地です。
ID:4
オークの木がたくさん生えていて、少しだけシラカバの木が生えているバイオームです。このバイオームでは、オオカミが出現します。
Java版1.15から、ミツバチの巣が生成されることがあります。
ID:18
森林バイオームの丘陵地です。
旧名称は(Forest Hills)です。
真紅の森(climzon_forest)
Minecraft/砂漠の寺院

砂漠の寺院は、オーバーワールドで生成される構造物です。
砂漠の寺院は、砂漠バイオームに生成されます。外見からピラミッドとも呼ばれます。生成される高さがY座標64となるため、構造物の一部が埋まって生成されることがあります。砂漠の寺院には、青色のテラコッタの下に隠し部屋があり、アイテムの入ったチェストがあります。また、隠し部屋には感圧板を踏むと爆発する、TNTの仕掛けがあります。
Minecraft/クリーパー

クリーパーは、マインクラフトのオーバーワールドにスポーンする、敵対モブです。

クリーパーは、オーバーワールドの明るさレベル7以下の場所にスポーンする、足が4本あり、緑色の体をした敵対モブです。クリーパーは、近くにいるプレイヤーに近づき、プレイヤーとの距離が3ブロックになると、カウントダウンを始め、2秒後に爆発します。爆発する前にプレイヤーが離れた場合、クリーパーはカウントダウンをやめて再び追跡します。プレイヤーがクリーパーに向かって火打石と打ち金を使用すると、クリーパーはその場で爆発します。クリーパーは、他のモブとは異なり声を発しません。
クリーパーを倒すと、火薬が手に入ります。
近くにヤマネコがいる場合、クリーパーはヤマネコから逃げようとします。
クリーパーに雷が当たると、青く光った帯電クリーパーに変化して、爆発力がアップします。特定のモブの近くで爆発して倒したときそのモブの頭が手に入ります。
Minecraft/オーバーワールド

オーバーワールドは、マインクラフトの世界(ディメンション)の一つです。
オーバーワールドは、リスポーン地点があり、プレイヤーが最初に降り立つディメンションです。オーバーワールドには、平原、砂漠、森林、ジャングルなど多数のバイオームがあり、それぞれのバイオームで異なるブロック、アイテム、構造物があります。またバイオームごとに、異なるモブやモンスターが出現します。黒曜石を使ってポータルを作ると、ネザーに行くことができます。
オーバーワールドには、昼夜サイクルがあり20分で一日が経過します。現実の世界と同じように、日の出になると太陽が昇り、日の入りになると太陽が沈みます。昼は10分間あり、ゾンビやスケルトンは体が燃えてダメージを受けます。夜は7分間あり、世界が暗くなりモンスターがスポーンします。日の出と日の入りは、それぞれ1分30秒間あります。
C言語/標準ライブラリ/tgmath.h

ISO/IEC 9899:1999(C99)で標準に追加されたヘッダー<tgmath.h>では、引数の型に応じて対応する数学関数を呼び出す型総称マクロが定義されます。 <tgmath.h>をインクルードすると、<math.h>と<complex.h>が(暗黙に)インクルードされます。
C言語の数学関数には実数型と複素数型があります。それぞれ引数の型に応じて、float、double、long doubleの3種類があるので 2 × 3 = 6 {\displaystyle 2\times 3=6} 通りの組み合わせを生じます。 C言語はC++のようなオーバーロードをサポートしていないため、引数の型が異なる関数のバリエーションには { sin, sinf, sin, sinl, csinf, csin, csinl } のような名前が付けられています。
<tgmath.h>には、呼び出すべき正しい数学関数の選択を簡単にするマクロが含まれています。マクロは渡された型に応じて正しい関数を呼び出します。 例えば、マクロsqrt()では、sqrt(2.0f) は sqrtf(2.0f)を、sqrt(2.0) は sqrt() を、sqrt(2.0L) ならば sqrtl(2.0L) を呼び出します。
ISO/IEC 9899:2011(C11)で、キーワード _Generic が導入されました。
_Generic は、型ジェネリック式を実現するためのもので、C++のオーバーロードの様に引数の型によって処理を選択します。
構文
型ジェネリック式は、与えられた「式」と一致する型に対応した値を取ります。 特別な「型」として default があり、他の全ての型に一致しなかった場合に default に対応した値を取ります。
_Generic の使用例(C11:WG14/N1570 Committee Draft ISO/IEC.p.68, §6.5.1.1 Generic selection.から抜粋)
crrt()は、立方根(cube root)を返す関数ですが、引数の種類によって、
の3つのバリエーションがあります。
この例で示された型総称マクロcbrt()では、_Generic() で渡された仮引数 X によって呼び出す関数を切り替えています。
実際のプログラムで、このマクロを使って試してみましょう。
Minecraft/要塞

要塞は、オーバーワールドに生成される構造物です。
要塞は、廃坑と同じように、オーバーワールドの地下に生成される構造物です。要塞は、石レンガ、ひび割れた石レンガ、苔むした石レンガで構成されています。要塞は、エンダーアイを投げた際に、飛んでいく方向に行き、そして地下に行くもしくは掘ることで、見つけることができます。要塞には、通路や図書室、儀式の間などがあり、それぞれにあるチェストの中身が異なります。儀式の間には、シルバーフィッシュのスポナーがありシルバーフィッシュがスポーンするほか、虫食いの石レンガからもスポーンします。
儀式の間にはエンドポータルがあります。エンドポータルには、いくつかエンダーアイがはめこまれています。エンドポータルの枠に全てエンダーアイをはめこむと、エンドポータルが起動し、ディメンションであるジ・エンドに行くことができます。
Minecraft/シード値

マインクラフトでは、ワールドを作成する際に、シード値を入力できます。
シード値とは、マインクラフトのワールドを生成するための値(数値)のことです。ワールドを作成する際、シード値を入力すると、その値のワールドが生成されます。そのため、別のワールドを作成する際に、同じ値を使うことで、全く同じワールドを生成することができます。シード値を指定せずにワールドを作成した場合、シード値の値がランダムになります。
C言語/標準ライブラリ/stdalign.h

オブジェクトのアライメントの問い合わせと指定をするためには、ヘッダー<stdalign.h> をインクルードします。
<stdalign.h> では、4つのマクロが定義されます。
_alignas_is_defined と _alignof_is_defined は、#if 前処理ディレクティブでの使用に適しています。
alignas()は、変数を宣言するにあたりアライメントをバイト単位で指定します。
alignof() は、指定した型が要求するアライメントを size_t で返します。
alignas型指定子(キーワード_Alignas)、alignof演算子(キーワード_Alignof)、ヘッダー<stdalign.h>、ISO/IEC 9899:2011で追加されました。
C言語/標準ライブラリ/assert.h

ヘッダー<assert.h>では、マクロ assert を定義しています。 このマクロは、プログラムが行う仮定を検証し、この仮定が間違っている場合に診断メッセージを表示するために使用することができます。
実行すると、式が偽(つまり0に等しい比較)の場合、assertはstderrに失敗した呼び出しの情報を書き込み、その後abort()を呼び出します。 stderrに書き込まれる情報には以下が含まれます。
プログラマはソースコードを変更することなくアサーションを排除することができます。 マクロ NDEBUG が <assert.h> のインクルード前に定義されている場合、assert マクロは単に次のように定義されます。
のように定義されているため、プログラムには何の影響も与えず、その引数を評価することもありません。したがって、assertに渡される式は、デバッグが無効なときには起こらないので、副作用を「含まない」ものでなければなりません。例えば、以下のようになります。
は、デバッグが無効の場合には行を読み込まず x に値を代入しません。

ISO/IEC 9899:2017 § 7.2.1.1 The assert macro。
_Static_assert は、コンパイル時に確定される式に対するアサーションです。
C99規格では、ヘッダーassert.hで関数を宣言する必要はありません。
assertマクロの定義は、ヘッダーassert.hで定義されていないNDEBUGというマクロの状態に依存する。 マクロ NDEBUG は、デバッグ情報を使用しないことを示す。 NDEBUGが定義されている場合、assertは何もしない(引数の評価もしない)式として定義される。 それ以外の場合、assertはテストする式が偽の場合にデバッグ情報を表示する。
民法第899条の2

法学>民事法>コンメンタール民法>第5編 相続 (コンメンタール民法)
(共同相続における権利の承継の対抗要件)
2018年改正にて新設。
代襲相続を含めた法定相続分を超えた相続権利は、登記等対抗要件を備えなければ第三者に対抗できない旨を定める。反対解釈をすれば、法定相続分に満たない相続権利は、対抗要件を備えなくても、第三者に対抗できる。
C言語/標準ライブラリ/errno.h

ヘッダーerrno.hでは、errnoと呼ばれる静的な場所に格納されるエラーコードによってエラー状態を報告するマクロを定義しています。
特定のライブラリ関数がエラーを検出すると、errnoに値が格納されます。プログラム起動時に格納される値はゼロです。 ライブラリ関数は、ゼロより大きい値のみを格納します。 どのライブラリ関数も、エラーを検出したかどうかにかかわらず、戻り値を返す前に格納された値を変更することができます。 ほとんどの関数は、エラーを検出したことを示す特別な値を返します。 一般的に、ポインタを返す関数はNULL、整数を返す関数は-1です。 関数の中には、エラーが検出されたかどうかを後でテストするために、呼び出し側がerrnoを0に設定することを要求するものもあります。
errnoマクロは、int型のl値に展開され、 errno機能を使用する関数で生成された最後のエラーコードを含みます。 旧来、これは静的なメモリ位置でしたが、今日ではマルチスレッドを可能にするために、ほとんどの場合マクロが使用され、各スレッドは独自のエラー番号を見ることになります。
また、ヘッダーには、エラーコードを表す整数定数に展開するマクロが定義されています。C規格では3つしか定義されていません。
Eと数字、またはEと大文字で始まる追加のマクロ定義も、実装によって指定できます。
UNIXやLinuxのようなPOSIX準拠のオペレーティングシステムには、他にも多くのエラー値が含まれており、その多くは上記のエラー値よりもはるかに頻繁に使用されています。例えば、ファイルを読み取るために開くことができない場合のEACCESなどです。
C言語/標準ライブラリ/stddef.h

N2176 C17 ballot ISO/IEC 9899:2017 §7.19 Common definitions <stddef.h>:共通の定義.
ヘッダー <stddef.h> では、以下のマクロが定義され、以下の型が宣言されています。いくつかのマクロは他のヘッダーでも定義されていますが、それぞれのサブクラスに記載されています。
size_t型は、メモリー領域のオブジェクトのサイズを表すのに適した型で、配列の要素を参照する際に使用します。通常、32ビットシステムでは32ビット、64ビットシステムでは64ビットで表現されますが、必ずしもそうではありません。符号なしです。
この型は,POSIX のヘッダー "unistd.h" で定義されている ssize_t という名前の符号付きのバリアントを持っている実装もある。GNU C Library では、ssize_t 型は "stddef.h" で定義されており、size_t と同じファイルに存在する。
ptrdiff_t 型は、2つのポインターを引き算した結果の符号付き整数型です。
2 つのポインタを減算するとき、両方とも同じ配列オブジェクトの要素、または配列オブジェクトの最後の要素を 1 つ過ぎた要素を指すものとし、結果は 2 つの配列要素の添え字の差となります。結果のサイズは実装で定義され、その型(符号付き整数型)は <stddef.h> ヘッダーで定義されている ptrdiff_t です。結果がその型のオブジェクトで表現できない場合,その動作は未定義である。言い換えると、式 P と Q がそれぞれ配列オブジェクトの i 番目と j 番目の要素を指している場合、式 (P)-(Q) は ptrdiff_t 型のオブジェクトに収まっていれば i - j という値になります。さらに、式Pが配列オブジェクトの要素または配列オブジェクトの最後の要素を1つ過ぎたところを指し、式Qが同じ配列オブジェクトの最後の要素を指している場合、式((Q)+1)-(P)は((Q)-(P))+1と同じ値を持ち、式(Q)+1が配列オブジェクトの要素を指していなくても、式Pが配列オブジェクトの最後の要素を1つ過ぎたところを指している場合には値0を持ちます。
オブジェクトは PTRDIFF_MAX よりも大きいかもしれません。PTRDIFF_MAX / PTRDIFF_MIN よりも大きな差がある 2 つのポインタを減算すると、未定義の動作になります。

max_align_t 型は、アライメントが最大の基本アライメントであるオブジェクトタイプのことです。
基本アラインメントとは、_Alignof (max_align_t)以下の有効なアラインメントのことである。基本的なアラインメントは、すべての保存期間のオブジェクトに対して、実装によってサポートされなければならない。 以下のタイプのアラインメント要件は、基本的なアラインメントでなければならない。

wchar_t 型は、サポートされているロケールの中で指定された最大の拡張文字セットのすべてのメンバーの個別コードを表すことができる整数型です。 サポートされているロケールで指定されている最大の拡張文字セットのすべてのメンバーの個別コードを表すことができる整数型です。 ヌル文字はコード値 0 とします。
基本文字セットの各メンバーは、実装が__STDC_MB_MIGHT_NEQ_WC__を定義していない場合、整数の文字定数の中で単独の文字として使用されるときの値に等しいコード値を持たなければなりません。
処理系定義の空ポインタ定数( null pointer constant )に展開されます。 C23のプロポーザルに C++ と同様な nullptr が提案されていますが、現在の草案には含まれていません。
マクロ offsetof の値は、構造体の先頭(typeで指定)から構造体のメンバー(member-designatorで指定)へのバイト単位のオフセットであるsize_t型の整数定数式に展開されます。
指定された構造体 type 内の指定された member フィールドのバイトオフセットを決定するために使用される関数マクロです。
C言語/標準ライブラリ/fenv.h

<fenv.h>は、ISO/IEC 9899:1999(通称C99) から導入されたC言語の標準ヘッダーです。<fenv.h>では、浮動小数点環境にアクセスするための 2 つの型といくつかのマクロおよび関数が宣言されています。浮動小数点環境とは、実装でサポートされている浮動小数点ステータス・フラグや浮動小数点制御モードを総称したものです。
各マクロは
浮動小数点環境を管理する<fenv.h>関数の引数として使用できます。
<fenv.h>では、浮動小数点環境にアクセスするため以下の関数が宣言されています。
以下の関数は、浮動小数点のステータス・フラグへのアクセスを提供します 219) これらの関数のint入力引数は、浮動小数点例外のサブセットを表しており、ゼロ、または1つ以上の浮動小数点例外マクロのビットごとのORを指定できます(例:FE_OVERFLOW | FE_INEXACTなど)。それ以外の引数値の場合、これらの関数の動作は不定です。
ISO/IEC 9899:2017 § 7.6.2.1 The feclearexcept function。
ISO/IEC 9899:2017 § 7.6.2.2 The fegetexceptflag function。
ISO/IEC 9899:2017 § 7.6.2.3 The feraiseexcept function。
ISO/IEC 9899:2017 § 7.6.2.4 The fesetexceptflag function。
fesetexceptflag関数は、引数exceptsがゼロの場合、または指定されたすべてのフラグが適切な状態に正常に設定された場合にはゼロを返します。それ以外の場合は、ゼロ以外の値を返します。
ISO/IEC 9899:2017 § 7.6.2.5 The fetestexcept function。
fetestexcept関数は、浮動小数点例外フラグの指定されたサブセットのうち、どれが現在設定されているかを判定します。引数exceptsは、問い合わせを行う浮動小数点ステータス・フラグを指定します。 この関数によって発生した浮動小数点例外のトラップが取られます。F.8.6の仕様も同じ精神に基づいています。
fegetround および fesetround 関数は、丸め方向モードの制御を行います。
ISO/IEC 9899:2017 § 7.6.3.1 The fegetround function。
ISO/IEC 9899:2017 § 7.6.3.2 The fesetround function。
このセクションの関数は、ステータス・フラグやコントロール・モードといった浮動小数点環境を一つの実体として管理します。
ISO/IEC 9899:2017 § 7.6.4.1 The fegetenv function。
ISO/IEC 9899:2017 § 7.6.4.2 The feholdexcept function。
ISO/IEC 9899:2017 § 7.6.4.3 The fesetenv function。
feholdexceptの呼び出しによって設定されたオブジェクトを指すか、または浮動小数点環境マクロに等しい。fesetenvは単にシステムをインストールするだけで、ノンストップモードのみを提供し、その後のインストールは些細なことであることに注意してください。このようなシステムでは、feholdexcept関数をfeupdateenv関数と組み合わせて使用し、呼び出し元から偽の浮動小数点例外を隠すルーチンを書くことができます。 feholdexcept関数は、その引数で表される浮動小数点ステータス・フラグの状態を監視し、これらの浮動小数点例外を発生させません。
ISO/IEC 9899:2017 § 7.6.4.4 The feupdateenv function。
§6.5 Expressions で定義された操作や、標準ライブラリで定義された関数やマクロは、以下のように変更されます。標準ライブラリで定義されている関数やマクロは、それぞれの仕様(IEC 60559への準拠を含む)に従って、浮動小数点のステータスフラグや制御モードを変更する。それ以外の場合は、フラグや制御モードを(ユーザが検知できるように)変更しない。それ以外の場合は、フラグやモードを変更しません。
<fenv.h>のferraiseexcept関数の引数が、IEC 60559で有効なアトミック操作のための一致した浮動小数点例外(すなわち、"overflow "と "inexact"、または "underflow "と "inexact")を表している場合、"overflow "または "underflow "が "inexact "の前に発生します。
は、表現の評価方法に関わらず、翻訳時に行うことができます。
C言語/標準ライブラリ/float.h

<float.h>はC言語の標準ヘッダーです。 標準の浮動小数点型のさまざまな制限やパラメータに展開するいくつかのマクロが定義されています。
浮動小数点型の特性は、浮動小数点数の表現を記述するモデルと、浮動小数点数に関する情報を提供する値の観点から定義されています。
各浮動小数点タイプのモデルを定義するために、次のパラメータが使用されます。
浮動小数点数( X {\displaystyle X} )は以下のモデルで定義されます。
浮動小数点型は、正規の浮動小数点数(x≠0の場合、f1>0)に加えて、準正規の浮動小数点数など、他の種類の浮動小数点数を含むことができます。浮動小数点型は、正規化浮動小数点数(x≠0、e=emin、f1=0)や非正規化浮動小数点数 数(x ≠ 0, e = emin, f1 = 0)や非正規化浮動小数点数(x ≠ 0, e > emin, f1 = 0)などの非正規浮動小数点数や、無限大や NaNです。NaNは、Not-a-Numberを意味するエンコーディングです。静かなNaNは、ほとんどすべての算術演算において qNaNは、ほとんどすべての算術演算において浮動小数点例外を発生させることなく伝播します。sNaNは、通常、浮動小数点の例外を発生させます。
マクロとその意味、値の制約(または制限)を示します。
催眠術

あなたは催眠術と聞いてどんなイメージを思い浮かべますか? 「人を一瞬にして眠らせる技術」でしょうか。それとも「実際には存在しない怪しげな術」でしょうか。 催眠術という言葉自体は、多くの人に知られていますが、内容については数多くの誤解が存在します。例えば次のようなものです。
これらはすべて誤りです。本書では催眠術に対する誤解を解くために「催眠術とは一体なんなのか」詳しく解説していきます。
ちなみに後に詳しく述べますが、日本で催眠術が広まり始めたのは明治末期からです。その時代に出版された書籍である「催眠術」の前書きには次のように書かれています。
2021年現在、100年以上経った今もこの誤解は根深く残っています。本書が誤解を払拭する一助となることを願います。
なおこの本は、催眠術のハウツー本ではありません。またフィクションの催眠術を否定するものでもありません。あくまで現実に存在する催眠術について解説したものです。
まず初めに催眠術とは何かを読んでください。そこで催眠術に関することを大まかに説明しています。その中で興味のある項目があれば、目次から各項目に飛んで読んでみてください。
C言語/標準ライブラリ/iso646.h

ヘッダー<iso646.h> は、代替つづりマクロを提供します。
<iso646.h> は、フリースタンディング環境で使える標準ライブラリの1つです。
<iso646.h> では、以下の11個のマクロが定義されています。
これらのマクロはC++では予約語となっています。
<iso646.h> は、ISO/IEC 9899/AMD1:1995 (C95)で追加されました。
C言語/標準ライブラリ/uchar.h

ヘッダー <uchar.h> は、Unicode 文字を操作するための型と関数を宣言しています。
ヘッダー <uchar.h> で定義される型。
これらの関数は、関連するマルチバイト文字列の現在の変換状態を完全に記述することができるオブジェクトを指すmbstate_tへのポインタ型のパラメータ ps を持ち、関数は必要に応じてこのオブジェクトを変更します。 ps が NULL ポインタの場合、各関数は内部の mbstate_t オブジェクトを代わりに使用します。このオブジェクトは、プログラム起動時に初期の変換状態に初期化されます。 この場合、同じ関数の他の呼び出しとのデータ競合を避けるために、関数は必要ありません。
あらかじめ定義されたマクロ名のうち、環境マクロ(Environment macros)は、<uchar.h> に関連するので、ここで紹介します。

<uchar.h> は、C Unicode Technical Report ISO/IEC TR 19769:2004が初出で、ISO/IEC 9899:2011(C11)で追加されました。
C言語/標準ライブラリ/threads.h

ISO/IEC 9899:2011(C11)で標準に追加されたヘッダー<threads.h>では、複数のスレッド実行をサポートするマクロを定義し、型、列挙定数、および関数を宣言しています。 ヘッダー<threads.h>は、ヘッダー<time.h>を(暗黙に)インクルードします。 <threads.h>をインクルードすると、<time.h>が(暗黙に)インクルードされます。
マクロ __STDC_NO_THREADS__ を定義している実装は、このヘッダを提供する必要はなく、その機能をサポートする必要もありません。

列挙された定数は以下の通りです。
要求された操作が、メモリを割り当てられなかったために失敗したことを示すため、関数から返されます。
C言語/標準ライブラリ/inttypes.h

ヘッダー <inttypes.h> は、ヘッダー <stdint.h> をインクルードしホストされた実装によって提供される追加機能で <stdint.h> を拡張します。
<inttypes.h> では、最大幅の整数を操作する関数と数値文字列を最大幅の整数に変換する関数を宣言し、imaxdiv関数が返す値の型である構造体の型 imaxdiv_t を宣言しています。
<inttypes.h> では、宣言された各型には、フォーマットされた入出力関数で使用する変換指定子のための対応するマクロが定義されています。
<inttypes.h> では、以下のフォーマット指定用マクロが定義されています。
以下のオブジェクトライクなマクロは、変換指定子を含む文字列リテラルに展開します。 変換指定子を含む文字列リテラルに展開され、長さ修飾子によって修正されることもあります。 これは、対応する整数型に変換する際に、フォーマットされた入出力関数の format 引数内で使用するのに適しています。
これらのマクロ名は、PRI (fprintf および fwprintf ファミリの文字列リテラル) または SCN (fscanf および fwscanf ファミリの文字列リテラル),220) の後に変換指定子が続き、その後に 7.20.1 の類似した型名に対応する名前が続くという一般的な形式をとる。これらの名前では、Nは§7.20.1 Integer types に記載されている型の幅を表す。例えば、PRIdFAST32 は、int_fast32_t型の整数の値を表示するためのフォーマット文字列として使用できる。
(言語処理系は)実装が<stdint.h>で提供している各型について、対応するfprintfマクロを定義し、実装がその型に適したfscanf長さ修飾子を持たない限り、対応するfscanfマクロを定義しなければならない。
この節は書きかけです。この節を編集してくれる方を心からお待ちしています。
最大幅の整数を操作する関数
7.8.2 Functions for greatest-width integer types
ISO/IEC 9899:2017 § 7.8.2.1 The imaxabs function。
ISO/IEC 9899:2017 § 7.8.2.2 The imaxdiv function。
2 The imaxdiv function computes numer / denom and numer % denom in a single operation.
3 The imaxdiv function returns a structure of type imaxdiv_t comprising both the quotient and the remainder. The structure shall contain (in either order) the members quot (the quotient) and rem (the remainder), each of which has type intmax_t. If either part of the result cannot be represented,the behavior is undefined.
strtoumax関数 7.8.2.3 The strtoimax and strtoumax functions
2 The strtoimax and strtoumax functions are equivalent to the strtol, strtoll, strtoul, and strtoull functions, except that the initial portion of the string is converted to intmax_t and uintmax_t representation, respectively.
3 The strtoimax and strtoumax functions return the converted value, if any. If no conversion could be performed, zero is returned. If the correct value is outside the range of representable values,INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned (according to the return type and sign of the value, if any), and the value of the macro ERANGE is stored in errno.
wcstoumax関数 7.8.2.4 The wcstoimax and wcstoumax functions
2 The wcstoimax and wcstoumax functions are equivalent to the wcstol, wcstoll, wcstoul, and wcstoull functions except that the initial portion of the wide string is converted to intmax_t and uintmax_t representation, respectively.
3 The wcstoimax function returns the converted value, if any. If no conversion could be performed, zero is returned. If the correct value is outside the range of representable values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned (according to the return type and sign of the value, if any),and the value of the macro ERANGE is stored in errno.
<inttypes.h> は、ISO/IEC 9899:1999 (C99)で追加されました。
C言語/標準ライブラリ/limits.h

ヘッダー<limits.h> では、標準的な整数型のさまざまな限界値やパラメータに展開するマクロがいくつか定義されています。標準的な整数型のさまざまな制限やパラメータに展開するいくつかのマクロを定義しています。
<limits.h> は、フリースタンディング環境で使える標準ライブラリの1つです。
以下に示す値は、#if 前処理ディレクティブで使用するのに適した定数式で置き換えられます。実装で定義された値は、表示された値と同じかそれ以上でなければならない。
char型、signed char型、unsigned char型の幅を表すマクロCHAR_WIDTH、SCHAR_WIDTH、UCHAR_WIDTHは、CHAR_BITと同じ値に展開しなければなりません。
すべての符号なし整数型に対して、<limits.h> または <stdint.h> で幅 N {\displaystyle N} を表す接尾辞 _WIDTH を持つマクロが定義されています。 その型で表現可能な最大値 2 N − 1 {\displaystyle 2^{N}-1} を保持する接尾辞 _MAX を持つマクロがあります(符号なし整数の最小値が 0 であることは自明)。
すべての符号付き整数型に対して、<limits.h> または <stdint.h> で幅 N {\displaystyle N} を表す接尾辞 _WIDTH を持つマクロが定義されています。 最小値 − 2 N − 1 {\displaystyle -2{N-1}} および最大値 2 N − 1 − 1 {\displaystyle 2^{N-1}-1} を表す接尾辞 _MIN および _MAX を持つマクロがあります。 これらのマクロは型で表現可能で、#if前処理ディレクティブでの使用に適しており、また対応する型のオブジェクトを整数の昇格則に従って変換した式と同じ型を持ちます。
char型のオブジェクトが負の値を保持できる場合、CHAR_MINの値はSCHAR_MINと同じになり、CHAR_MAXの値はSCHAR_MAXと同じになります。それ以外の場合は、CHAR_MINの値は0とし、CHAR_MAXの値はUCHAR_MAXと同じとします。
ヘッダー <limits.h> の内容を以下に示します。 値はすべて定数式で,#if 前処理ディレクティブで使用するのに適しています。 (以下のマクロでは、表示されている最小値は、実装で定義された値に置き換えるものとする)
以下のマクロでは、表示されている最小値は、実装で定義された値に置き換える必要があります。
以下のマクロでは、表示されている最小の大きさは、前節で示されているように、上記のマクロから推測される同一符号の実装定義の大きさに置き換えられます。
刑事訴訟法第157条の3

法学>コンメンタール>コンメンタール刑事訴訟法=コンメンタール刑事訴訟法/改訂
(証人尋問開始後の免責要求)
2016年改正にて新設。
改正前の条項は、第157条の5に繰り下げ。
刑事訴訟法第157条の2

法学>コンメンタール>コンメンタール刑事訴訟法=コンメンタール刑事訴訟法/改訂
(証人尋問開始前の免責要求)
2016年改正にて新設。
改正前の条項は、第157条の4に繰り下げ。