プログラミングC:リテラル

この記事はシリーズの一部です – どのようにプログラミングするには:Cプログラミング

序文

プログラミングクラッシュコースの記事では、式が「すぐに実行され」、ステートメントはプログラム制御構造であると述べ、式とステートメントの違いに触れました。 Cでは、これは真実であり、式はプログラム内に大きな構成要素を含んでいます。 Cの式は、2つまたは3つのカテゴリに分類できます。 変数の宣言や式を式として扱う人もいますが、実際には別の記事で変数の宣言を説明します。ここでは、スコープなどの詳細を詳しく調べることができます。 この記事では、代入式、関係式、およびビット単位の演算子を含む、リテラル式とC言語の演算子に焦点を当てます。 それでは、どうしたらいいの?

リテラル

リテラルは、コードに直接値を書き込むときです。 たとえば、10は “this is a string”と同様にリテラルです。 これは変数の代入で最も顕著になります。

上記のコード10と10.54はリテラルであり、その値はまったく同じです。 このようなリテラル定数は「リテラル」と呼ばれています リテラルにはいくつかの注意点があり、ここではそれらをカバーします。 これらの警告のうちの第1は、リテラルが最小の受け入れデータ型に「変換」されることです。 これは、分数でない数字は整数であると考えられ、1文字は文字になり、小数は実際にはこの傾向を打ち消して倍になります。 以下に示すように、これを制御する方法があります。

char リテラル

文字はおそらく文字列の一部です。 これは、あなたが文字リテラルを指定したときに想定されているものですが、もちろん ‘文字’です。 次のように一重引用符で囲んで指定します。

十分に単純ですが、まあ、マルチバイト文字を必要とする文字エンコーディングがあります。 これらは1バイト以上の文字で、通常は日本語のような別の文字セットで別の言語でプログラミングしているときに表示されます。 一般に16ビット長の「ワイド文字」もあります。 しかし、それは事をあまり複雑にしませんが、リテラルの定義方法を変更します。 マルチバイト文字の場合は、文字を一重引用符で囲むだけです。 ワイド文字リテラルを指定するには、リテラルの前にLを置く必要があります。 これにより、文字リテラルは「ワイド」(通常16ビット)とみなされます。 ただし、ワイド文字の場合は、Cに組み込まれていないデータ型を使用する必要がありますが、wchar_tという標準ライブラリに存在します。 これには、この記事の範囲外の<stddef.h>ファイルを含める必要があります。 以下に、マルチバイト文字とワイド文字の例を示します。

リテラル全体で、コンパイラにそれらをある意味で解釈させるように手紙を付けることによって、さまざまな方法で変更可能であることがわかります。

注:charリテラルに格納できるすべての文字がプログラマによって簡単に入力されるわけではありません。 これには、バックスペース、アラートベル、リターン文字などのASCII文字が含まれます。 これらの場合、プログラマはエスケープシーケンスとして知られているものを使用しなければなりません。 エスケープシーケンスは単にバックスラッシュで、その後に別の文字を表す修飾子が続きます。 たとえば、エスケープシーケンス\ nは改行を表し、\ tはタブを表します。 エスケープシーケンスの完全なリストについては、ウィキペディアの関連記事を参照してください。

int リテラル

整数リテラルは通常の数字と同じように見え、実際には小数点以下の桁数のない通常の数字として書かれています。 5と-34はどちらも整数リテラルです。前述のように、コンパイラは数値定数を保持する最小限の互換性のあるデータ型に適合させようとしますが、255未満の数値はchar型にはなりません。コンパイラーがintリテラルであると判断すると、intにとどまりますが、リテラルが標準intに収まらないほど大きければ、long intになります。標準intとlong intの違いの詳細については、基本データ型について説明している記事を参照してください。たとえば、リテラル73はintに収まり、234,123はlong intに収まります。

さて、整数のリテラルを、その文字の末尾に文字 ‘L’を付加することで、1より小さい場合でさえ、long intとして解釈させることができます。小文字または大文字のLを消すことができますが、大文字を使用する方がよりわかりやすくなります。同様に、負のリテラルには負の符号が付加され、標準のリテラルが符号付き整数に割り当てられます。コンパイラに強制的に符号なし整数として解釈させることもできます。その末尾に文字 ‘U’を追加します。繰り返しますが、大文字または小文字の作品、私は大文字を好むだけです。

注:整数を10進数10とは別の基数で書き出す方法もあります。16進数と8進数の形式でリテラルを書き出すこともできます。 バイナリ、16進数、8進数の詳細については、私のWonderful World of Binaryシリーズを参照してください。 リテラルとして16進値を書き込むには、その値の前に0xを付けます。 したがって、1の2進数でいっぱいのバイトは0xFFとして書き込まれます。 オクタルを書くには、単に値の前に0を置きます。この意味では、9を8進数で書くには、011を書いてください。

double リテラル

二重リテラルは、234.567などの小数成分を持つ数値です。 Cでは、科学的表記を使用して10進数の詳細を指定することもできます。 デフォルトでは、このリテラルは最小コンテナのトレンドに逆行し、デフォルトではリテラルをダブルデータ型として解釈します。 もちろんこれには方法があります。 10進数を大きなdoubleではなくfloatとして解釈したい場合は、末尾に ‘F’文字を追加することができます。 この ‘F’は大文字でも小文字でもかまいませんが、大文字を好むほど大文字です。 リテラルをlong doubleと解釈する方法もあり、それはリテラルの最後に ‘L’文字を追加することです。 どのようにコンパイラはこれを知っていますか? ‘L’はlong doubleでlong intではないことを意味しますか? これは、リテラルに小数成分があるためです。小数部分がない場合は、代わりに整数になります。

注:C99では、リテラルの末尾に「LL」を追加することで、long long修飾子を指定することもできます。 これにより、整数はlong long double / intとしてintepretedされます。 C99はロング・ロング・モディファイアを提供する標準であるため、C99に対してコンパイルするプログラムにのみ適用されます。

文字列定数

Cでは文字列をリテラルとして一緒に指定できますが、その使用は制限されています。 Cは文字列データ型を持たないので、文字列リテラルは実際にはchar配列またはcharポインタを必要とする特定の場所にしか現れません。 文字列は二重引用符で囲みます。これは重要です。 “a”と “a”はCコンパイラと同じものではなく、文字列リテラルとcharリテラルです。

エスケープシーケンスは、文字リテラルに適用されるように文字列に適用されます。 たとえば、新しい行とタブを文字列に含める場合、次のように書くことができます。

結論

リテラルはプログラミングに非常に重要です。プログラムにデータを取り込む方法の1つです。 変数にリテラルを割り当てることで、操作を実行する回数などの数を指定できます。 プログラムのさまざまな部分でリテラルを使用することで、配列の大きさを指定できます。 文字列リテラルを使用すると、特定のエラーが発生したときに出力されるエラーメッセージの配列をハードコード(プログラムがプログラムコードに直接使用するデータを格納するとき)することがあります。 リテラルがなければ、プログラムの詳細を指定することや、プログラムの動作に影響する定数を定義することはできません。

この記事はシリーズの一部です – どのようにプログラミングするには:Cプログラミング

この記事を読んでいただければ、パトリオンのサポートを検討することもできます。

しかし、毎月の約束が少しでもあれば、私はそれを得る、あなたは私にコーヒーを買うことを考えるかもしれない。

photo credit: Glyn Lowe Photoworks. Blue Port – Rickmer Rickmers via photopin (license)

あわせて読みたい

コメントを残す

%d人のブロガーが「いいね」をつけました。