「C言語/記法」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
M →‎国際文字名: hex-quad: を1行に
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎定数: →‎文字リテラル: 定数とリテラルを混同している編集を修正。
タグ: 2017年版ソースエディター
199 行
 
=== 定数 ===
定数( ''Constraints'' )とはプログラム実行時に一定の値しかもたない数である。
変数の値がプログラム実行中に変更される場合もあるのに対して、定数の値はプログラム実行中を通して一定である。
ソースコード中で直接に記述された定数を特にリテラルとも呼ぶ<ref>const修飾子で修飾された複合オブジェクトの事も、複合リテラルと呼ぶ</ref>。ここではそのリテラルについて説明する。
 
定数には整数定数、浮動小数点定数、列挙定数、文字定数、文字列リテラル、などがある。
; 整数定数
整数定数とは整数を記述するための定数である。主に10進数表記が使われるが、必要に応じて2進数表記や8進数表記や16進数表記が使われることもある。8進数表記では接頭辞として0bあるいは0Bを付け、8進数表記では接頭辞として0を付け、<ref>『知ってた?8進数のナゾ:Alternative 笑門来福:ITmedia オルタナティブ・ブログ』http://blogs.itmedia.co.jp/pina/2006/06/8_bf7b.html</ref>16進数表記では接頭辞として0xあるいは0Xを付ける。
: 整数を記述するための定数
浮動小数点定数とは浮動小数点数を記述するための定数である。主に10進数の小数点数表記で記述するが、必要に応じて有効数字部と指数部で記述することもある。
: 10進数表記のほか、2進数表記や8進数表記や16進数表記を使うことができる。
列挙定数についてはここでは説明しない。詳細は[[C言語/データ型と変数#enum]]を参照せよ。
: 2進数表記では接頭辞として0bあるいは0Bを付け、8進数表記では接頭辞として0を付け、16進数表記では接頭辞として0xあるいは0Xを付ける。
文字定数とは文字を記述するための定数である。半角英数記号や制御文字などが記述できる。
:; 例
単純文字列リテラル(character string literal)とは1バイト文字または多バイト文字の文字列を記述するための定数である。
:: 42, 0b101010, 052, 0x2a
ワイド文字列リテラル(wide string literal)は,文字Lという接頭語をもつことを除いて,単純文字列リテラルと同一である。
; 浮動小数点定数
C言語では文字列は(NULL文字で終端された)文字の配列として扱われるが、ここではこれ以上説明しない。詳細は[[C言語/文字と文字列]]を参照せよ。
: 浮動小数点数を記述するための定数
: 10進数の小数点数表記のほか、有効数字部と指数部あるいは、16進数浮動小数点で表記することができる。
:; 例
:: 3.14, 3.14e+00, 0x1.91eb851eb851fp+1
; 列挙定数
: 整数値であるが、識別子はユーザが定義する。{{See also|C言語/データ型と変数#enum}}
; 文字定数
文字定数とは: 文字を記述するための定数である。半角英数記号や制御文字などが記述できる。
:; 例
:: 'C',
 
 
*次に主な定数を表にまとめた。
234 ⟶ 244行目:
|-
|文字定数|| - ||「'(一重引用符)」で囲まれた文字(単純文字定数)<hr>「L」に続く「'(一重引用符)」で囲まれた文字(ワイド文字定数)||'a'<hr>L'a'
|-
|文字列リテラル|| - ||「"(二重引用符)」で囲まれた文字列(単純文字列リテラル;''character string literal'')<ref>『JISX3010:2003』p.45「6.4.5 文字列リテラル」</ref><hr>「L」に続く「"(二重引用符)」で囲まれた文字列(ワイド文字列リテラル;''wide string literal'')|| "Hello, World!"<hr>L"Hello, World!"
|-
|}
 
 
*整数定数の接尾語
整数定数に接尾語を付けることで、符号有無と型を指定することができる。ます<ref>『JISX3010:2003』p.39「6.4.4.1 整数定数の型は、次の表の対応する並びの中で、その値を表現できる最初の型である」</ref>
 
{|class="wikitable"
!# 接尾語!!10進定がなければ、整!!8進定数の型16進定数 (signed) int です。
# 接尾語が U あるいは u ならば、符号なしです。
|-
# 以下のいずれかなら形が指定されます。
|なし||int<br>long int<br>long long int||int<br>unsigned int<br>long int<br>unsigned long int<br>long long int<br>unsigned long long int
## 接尾語が L あるいは l ならば、long です。
|-
## 接尾語が LL あるいは ll ならば、long long です(Ll やlL は不可)。
|u又はU||unsigned int<br>unsigned long int<br>unsigned long long int||unsigned int<br>unsigned long int<br>unsigned long long int
 
|-
2 と 3 は併用でき、前後を問いません(168UL と 168LU は同じ意味)
|l又はL||long int<br>long long int||long int<br>unsigned long int<br>long long int<br>unsigned long long int
|-
|u又はU及びl又はLの両方||unsigned long int<br>unsigned long long int||unsigned long int<br>unsigned long long int
|-
|ll又はLL||long long int||long long int<br>unsigned long long int
|-
|u又はU及びll又はLLの両方||unsigned long long int||unsigned long long int
|}
<ref>『JISX3010:2003』p.39「6.4.4.1 整数定数」</ref>
 
*浮動小数点定数の接尾語
275 ⟶ 273行目:
char c;
c='a';//cに文字定数aを代入する。
|}
</syntaxhighlight>
 
=== 文字リテラル ===
文字リテラル( ''String literals'' )<ref>『JISX3010:2003』p.45「6.4.5 文字列リテラル」</ref>には、単純文字列リテラルとワイド文字列リテラルがある。
; 単純文字列リテラル(character string literal)
単純文字列リテラル(character: string literal)とは1バイト文字または多バイト文字の文字列を記述するための定数である。
; ワイド文字列リテラル(wide string literal)
ワイド文字列リテラル(wide: string literal)は,文字Lという接頭語をもつことを除いて,単純文字列リテラルと同一である。
C言語では文字列は(NULL文字で終端された)文字の配列として扱われるが、ここではこれ以上説明しない。詳細は[[C言語/文字と文字列]]を参照せよ
{{See also|C言語/文字と文字列]]}}
 
{|class="wikitable"
|+ 文字リテラルの種類と記法
!定数の種類!!進数!!記法!!例
|-
|文字列リテラル|| - ||「"(二重引用符)」で囲まれた文字列(単純文字列リテラル;''character string literal'')<ref>『JISX3010:2003』p.45「6.4.5 文字列リテラル」</ref><hr>「L」に続く「"(二重引用符)」で囲まれた文字列(ワイド文字列リテラル;''wide string literal'')|| "Hello, World!"<hr>L"Hello, World!"
|-
|-}
 
<syntaxhighlight lang=c>
//例 文字列変数に文字リテラルの値をコピーする。
#include <string.h>
 
int main(void)
{
char str[32];
strcpy(str,"Hello, World!");//strに文字列リテラルHello, World!をコピーする。