C/C++言語の予約語(キーワード)

書きかけの暫定版

予約語の一覧
C言語(89年版)の予約語 auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
C++言語 で追加された予約語 asm catch class delete friend inline new operator
overload private protected public template this throw try
virtual
標準C++言語の予約語
and and_eq asm auto bitand bitor bool break
case catch char class compl const const_cast continue
defualt delete do double dynamic_cast else enum explicit
export extern false float for frend goto if
inline int long mutable namespace new not not_eq
operator or or_eq preivate protected public register reinterpret_cast
return short signed sizeof static static_cast struct switch
template this throw true try typedef typeid typename
union unsigned using virturl void volatile wchar_t while
xor xor_eq
廃止になった予約語
overload

C言語からある予約語

auto

宣言する変数が自動変数であることを明確に指定する。
自動変数とは、自動的に記憶領域を確保して、意味のある数値を格納できる変数。
関数内部だけで使うことができる。
なにも付いてない時は自動変数となるので省略可能。


int func()
{
auto int i,j,k; }
break
繰り返しループなどの制御ブロックで、ブロックの終わりにジャンプする。
つまりwhile(a){・・・}ならば制御ブロックから脱出し、do{・・・}while(b)ならばbreak以降を飛ばして、while(b)の評価へ飛ぶ。
制御ブロック始めに移動する場合はcontinueを用いる。
int i=1;
while( ++i ){
   cout << "i =" << i << "\n";
   if ( i ==10 ) break;// 条件成立でwhileブロックからの脱出
}
case

多重分岐switch文の条件を整数で指定する
条件の整数値はラベルとして扱われるので、breakswitchブロック制御を抜けないとswitch終わりまで実行される。


#include <iostream.h>
int main()
{
    int s;
    switch( s )
    {
        case 1:
          cout << "case 1\n";
          break;  // このbreakはswitchブロックからの脱出
        case 2:
          cout << "case 2\n";
          break; // このbreakはswitchブロックからの脱出
        case 4:
          cout << "case 4\n";
          break; // このbreakはswitchブロックからの脱出
        case 5:
        case 6:
          cout << "case 5 or case 6\n";
        break; // このbreakはswitchブロックからの脱出
        default: // default:ラベルは、switchブロックの一番最後のcaseラベルの後に書くのが作法。
          cout << "defualt, case other 1\n"
     }
   return 0;
}
char
宣言する変数が文字型変数である事を宣言する。
確保されるメモリは8Bitである。
扱える数値は-128から+127であり、unsignedの修飾がつくと0から255までとなる。
char moji;
const

宣言する変数が書き換えできないことを明確に宣言する。
constで修飾されたオブジェクトを書き換えようとするコードを書くと、コンパイラがそのことを警告をしてコンパイル作業を停止する。(まれに無視されることもあるらしい)


int funcName( const char * String1 )
{
    cout << String1;
    return 0;
}
continue
繰り返しループや関数など、ブロックの始めへ戻る。
つまりwhile(a){・・・}ならば制御ブロックの先頭に飛んで式を評価し、do{・・・}while(b)ならばブロックの始めへ飛ぶ。
また、繰り返しループなどの、ブロックの終わりにジャンプするのにはbreakを使う。
default

switch多重分岐の最後条件でcaseの条件に合わなかったものを含めて総ての値を真値とみなす。
一番最後のcaseよりも、後に必ず記述するのが新訳聖書以降の作法である。


#include <iostream.h>
int maim();
    int s
    switch( s )
    {
        case 1:
          cout << "case 1\n";
          break;
        case 2:
          cout << "case 2\n";
          break;
        case 4:
          cout << "case 4\n";
        case 5:
        case 6:
          cout << "case 5 or case 6\n";
        case 8:
          cout << "case 5 or case 6, or case 8\n";
        break;
        default:
          cout << "defualt 1\n"
        break;    // ここのbreakはいらなそうに見えるけど、書かないとVisual C++ でコンパイルできない
     }
   return 0;
}

プログラミング言語でない日常会話で「宴会にdefaultで出席」のような用例は、「 用事が済んだら(無かったら)無条件で出席」という意味で使われる。
銀行の人との約束にはなぜか禁句らしい。
そう言えば世の中「幾つも面接を受けたけどdefualtで今の仕事に就いた」っ てかたも大勢いるようだ。

do

繰り返しループの始まり。判定はループの最後にあるwhile文にある条件式で行うので、一回は必ずループの終わりまで実行される。


#include <iostream.h>
int main()
{
      int n=10
      do {
        cout << "do loop, last " << n << "turn."
      } while( --n);
      returm 0;
}
double
倍精度浮動小数点型変数を宣言する。
最大15桁で、表現範囲は10-307から10308までである。

duble a;

else
分岐判断制御ifの条件が成立しなかった時にelseの後に続く式が実行される。
if( a==b ) cout << "tuer\n"; else cout << "flase";
enum

列挙型。
ただ単に、列挙されたシンボルに整数を割り付けるだけである。
何も断りが無い時は一番最初のシンボルが0になり、その次のシンボルはインクリメントされた値がわりつけられる。
代入演算子を使って代入することも出来る。
ANSI制定以後に設けられたもので、偉く古いC言語(K&R初版)では使うことが出来ないので、プリプロセスの#defineで一つずつマクロを定義するのが定番だった。
しかし、マクロの展開はかなり癖の強い前処理なので、意図したコードに展開されるマクロを記述するのが難しい。 enumを用いることで難読解なコードになりやすいマクロ定義の使用を減らすことが出来る。


enum AsciiContChar {
   NUL, SOH, STX, EXT, ETO, ENQ, ACK, BEL,    // 0x00 to 0x07
   BS,   HT,  LF,  VT,  FF,  CR,  SO,  SI,    // 0x08 to 0x0f
   DLE, DC1, DC2, DC3, DC4, NAC, SYN, ETB,    // 0x10 to 0x17
   CAN,  EM,  SUB, ESC, FS,  GS,  RS,  SP,    // 0x18 to 0x1f
   DEL=0x7f // Symbol of, ASCII ContrlCharactor Code.
};
extern

外部参照。
定義した変数が関数ブロックの外部にある大域変数若しくは、関数や大域変数の宣言が他のファイルにある事を明確に宣言するもの。


extern char *_environ[];
int functionName( int a )
{
    extern int extObject;  // 外部で宣言されている大域変数であることを明示する。
    extObject =~a;
    return 0;
}
float
単精度浮動小数点型(単精度実数型)変数を宣言する。
表現範囲はインクルードファイルのfloat.hに定義されている。
データ長は32ビット。
最大7桁。
10-37から1038まで。

float f_hensu;

for

繰り返しループ。条件式が真値の間forに続く式が繰り返し実行される。
条件が偽値にならないように記述すると無限ループにを作ってしまう事になる。


    for( i=0 /* 初期値などの式 */ ; i>10 /* 条件式 */ ; ++i /* 変数の増加などの式 */ )
printf("i=%d\n",i);
goto
無条件ジャンプ。無条件にラベルのある場所へプログラムの制御が移行する。
普通の人間はあまり使うことはないが、コンパイラのオプティマイザの出力コードと、スピードを要求するために自らソースコードを最適化して書き直すギークな達人はよく使うらしい。

関数の外へ飛び出す無条件ジャンプを書いてはいけない。
そのような時は、C言語の場合インクルードファイルsetjmp.hに書いてある setjump() longjump()を用いて、C++言語の場合はtry throw catchを使う。


int funcName( int a )
{
    if ( a < 100 ) goto label_1;
    a=a++;
  label_1:
    a = a/2;
    return a;
}
if

分岐判断制御文。式が真値の時ifに続く式が実行される。

    if( a==b ) cout << "tuer\n"; else cout << "flase";
int
整数型変数。機種によって扱える数の大きさが異なり、一般にプロセッサのレジスタ長と同じ長さになっていることが多い。
表現できる数値の範囲はインクルードファイルのlimits.hに定義してある。
移植性を向上させるために表現範囲を明確にする必要のある時はlongshortで修飾をする。
long
倍精度整数型変数。メモリーに確保される変数の大きさは32bitである。
表現できる整数は-2147483647から2147483647であり、unsignedの修飾がつくと0から4294967295までである
register
宣言する変数が、局所的によく使われる変数であることを指定する
この指定をすると中央演算処理装置内の数個所しかない高速の記憶領域に変数を保持するような機械語を出力することをコンパイラに知らせる。
これは、関数の内部のみで使うことができる。
できの悪いコンパイラで多用すると変数が椅子取りゲームになってしまうので好ましくないようだが、最近のコンパイラは最適化ルールによって勝手に決められることがあるようで、あまり記述の意味をもたなくなってきているようだ。
return
関数から抜ける。returnに続く式が関数の戻り値になる
関数ブロックの最後に記述するのが作法のようである。
short
単精度整数型変数。メモリに確保される変数の大きさは16bitである。
表現範囲は-32768から32767であり、unsignedの修飾がつくと0から65535である。
signed
変数が符合付きの数値を扱うことを明確に宣言する。
この宣言を省略した変数はsignedとなる。
sizeof
変数型で確保されるメモリの長さを算出する演算子。
static
変数が、静的変数であることを明確に宣言する。
これは、変数の寿命に関係している。
staticで修飾されたローカル変数は、関数の呼び出しが終了した後にも破棄されず、その変数の内容は保持される。
struct

構造体を宣言する。
幾つかの変数をまとめて一まとめにして扱うように宣言する。
住所録のようなデータ構造や、極座標の変数型定義をするようなときにつかう。
C++で拡張されたclassと使い方が似ているが、structの構造体にある総てのオブジェクトがclasspublicメンバにあるのと同じ。
C++では、structclassがあるのではあまり使わないらしい。


// 構造体の定義
struct complex {
 float real;
 float imaginary;
};
// 極座標の足し算 
struct complex add ( struct complex a, struct complex b )
{
    struct complex rtn;
    rtn.real = a.real + b.real;
    rtn.imaginary = a.imaginary + b.imaginary;
    return rtn;
}
switch

多重分岐。switchに続く整数型の変数をcaseやdefualtの条件式に合うかを判断する。


#include <iostream.h>
int maim();
    int s
    switch( s )
    {
        case 1:
          cout << "case 1\n";
          break;
        case 2:
          cout << "case 2\n";
          break;
        case 4:
          cout << "case 4\n";
        break;
        case 5:
        case 6:
          cout << "case 5 or case 6\n";
          break;
        default:
          cout << "defualt 1\n";
     }
   return 0;
}
typedef
新しい変数型を定義する。

typedef W_CHAR unsined short; //W_CHAR型が「符号なし単精度整数」であることを宣言
W_CHAR kanjiChar; // W_CHAR型でkanjiCharを宣言
union
共用体を定義する。
構造体structによく似ているが、メンバが幾つあってもメモリーに確保されるはオブジェクトは共通したポインタを持っているので一つの場所だけである。
噂によるとPASCAL言語にあるレコードの概念が近いらしい。
たとえば

union Word_obj {
      struct INTL_WORD {
      unsigned char evn;  // 偶数
      unsigned char odd;  // 奇数
      }
      struct MOT_WORD {
      unsigned char odd;  // 奇数
      unsigned char evn;  // 偶数
      }
      unsigned short WordAccess;
};
のようなコードを記述するとメンバのstruct INTL_WORD, struct MOT_WORD, unsigned short WordAccessのそれぞれを指すアドレスは全て同じとなる。
unsigned
符合無しの変数であることを明確に宣言する。
unsigned char *strings;
void
変数の型がない事を宣言する。
関数の戻り値がない場合ときんなどにつかう。
volatile
揮発性変数であることを明示する。
コンパイラが最適化するときに変数の記憶場所とか寿命に影響するらしい。
関数内部のローカル変数は、何も断り書きがないときは、揮発性変数であることには違いないが、オブジェクトがある一定の番地にアロケートされる保証がない。
(たいていすべてのプログラムはゼロ番地から始まるように設計されている。 複数のプログラムが同時に動く必要がある場合に同じ番地にロードしてしまったら競合して一緒に動くけがない。 実際のアドレスゼロ番地から数十ワードはプロセッサの特別な処理をするための領域になっているのでほかの場所を利用しないとプログラムは動かないことになっている。 ということでプログラムがメモリのどこにあるかは実行するときにきめることになる。) 故に、変数オブジェクトの場所を絶対アドレスで指定して初期化する必要があるときに、有意義な意味を持つ。
volatileに対してstatic静的変数がある。

volatile int intaguage;

while
繰り返し制御。
whileに続く式が真値の時に繰り返す。

条件式がブロック開始にあるので、条件によっては繰り返しブロック内を1度も実行しないことがあるのがdoで始まる制御と違うところ。


#include <stdio.h>
int main()
{
    // printing countdown number.
    int i=10;
    while( i-- ) printf("%d\n", i);
    return 0;
}

以下はC++言語で追加された予約語である

asm
C言語にアセンブラ言語を埋め込むということらしい
処理系独自に拡張している場合があるので、かならずしも標準のスタイルが実装されていることはない。
catch
tryブロックの中でthrowで発信されたメッセージの受信。
例外処理(エラー処理の記述)なんかに使えるらしい。
C言語時代のsetjump()関数及びlongjanp()関数で実現される機能をC++の言語仕様として取り入れたもの。
class

生成子
データの抽象化で、プログラムの集まりをクラスという。
例で言うならば、お饅頭を馬の糞に摩り替えることが出来ないようにするってことか(?!)。
クラスのオブジェクトを初期化する。
使い方はC言語のstructに似ているが、structとは違ってclassは一部の構造メンバをpublic以外の部分を非公開にすることができる。
これは、インスタンスやメソッドといった、プログラムの集まりをクラスといって、C言語のデータ構造として表現したもので、structでメンバ変数とよんでいたものがインスタンス変数、メンバ関数と呼ばれていたものがメソッドと名前をかえただけのようにも見えなくはない。

class ClassName {
  // private objects
  int i,j,k;
public:
  // public objects
  int function(int arg1, int arg2);
  int strlenfunc( char *str );
}
delete
消滅子
newで動的に作ったオブジェクトを削除。
C言語のfree()関数に似た機能を、C++において言語の仕様とし、deleteというキーワードを設けた。
friend
クラスのフレンド関数を宣言する。
クラスの非公開部分を参照する関数を明示する。
friend で修飾された関数は、所属していないクラスのデータにアクセスできるようになる。
この宣言を多用するのは強制捜査令状のようなものかも知れない。
inline
インライン関数であることを明示する。
インライン展開は、コンパイラによる最適化機能の挙動で決まることが多いと思われるので、inlineの修飾はあまり意味を持たない気がする。
new
構築子
動的にオブジェクトをメモリに割り付ける。
プログラムを終わる前にdeleteで確保したオブジェクトを削除すること。
operator
演算子の多重定義
overload
関数を多重定義する。
1989年制定の標準C++言語にはもはや予約語として存在しない。
private
classの非公開部分の宣言
クラスに属する関数だけが参照することができる。
protected
classの非公開部分の宣言
クラスに属する関数と派生クラスから参照が可能。
public
classの公開部分の宣言
ここに宣言されるメンバーは広域的に参照可能で、structによく似ているようだ。
ここにはデータを格納する変数を宣言しないで、protected或いはprivateにできるだけ宣言するのがお作法。
template
テンプレート。直訳すると雛形。
テンプレートはクラスと関数をパラメータ化する。
this

thisポインタ。
メンバ関数の暗黙の引数。

プログラムの例は実行を目的としていない不完全なものです。

#define STACK_DEEP 256
class MyStack {
int count;
char data[STACK_DEEP];
public:
mystack(){ count=0; } // デフォルトのコンストラクタ
int pop();
int push();
}
MyStack::pop()  // thisポインタは暗黙で、この関数に渡されます。
{
   if( this->count > 0) // this->countはメンバのchar count[]を参照していることになります。
      return this->data[--(this->count)];
      else return 0;
}
throw
tryブロックの中でメッセージを発信する。
catchがメッセージを受け取る。
例外処理(エラー処理の記述)に使えるらしい。
C言語時代のsetjump()関数及びlongjanp()関数で実現される機能をC++の言語仕様として取り入れたもの。
longjump()のようなもの。
try
例外処理(エラー処理の記述)なんかを気にする必要があるところに使うらしい。
tryブロック中のthrowでメッセージを発信して、catchがメッセージを受け取る。
C言語時代のsetjump()関数及びlongjanp()関数で実現される機能をC++の言語仕様として取り入れたもの。
setjump()のようなもの。
virtual
抽象型
派生クラスで基本クラスと同じ名前のオブジェクトがある時に、virtualで修飾された基本クラスのオブジェクトはスコープから見えなくなり、派生クラスのオブジェクトにアクセスするようになる。

標準C++言語で追加された予約語

and
and_eq
bitand
bitor
bool
2値型。bool型の変数は、falsetrueのいづれかを保持する。
従来からの古典的なC言語の手法でフラグのような用途のために2値型を表現する場合に、マクロ定義でTRUEFALSEの二つを定義するか、enum列挙型を定義するのが一般的であるが、TRUEFALSEのとり得る値において、値の定義がプログラマの気分に依存するといった問題があった。
ライブラリを形成する場合などは気分でコーディングされてはたまったものではない。bool型を規格として定義しておけば、プログラマの気分で値が異なるといった問題を避けることが出来る。

bool型変数の長さについては、二つの値を保持できる長さ分だけあればよい(たとえば1ビット長など)ことになっているので、int型とは異なる扱いにするべきであるが、実際にbool型の長さがどれくらいもっているかは、処理系の実装に依存する。

compl
const_cast
dynamic_cast
explicit
export
false
bool型においてとりえる値で、偽値である
mutable
namespace
名前空間。名前の競合を防ぐ目的に用いる。
not
否定論理
not_eq
or
論理和
or_eq
reinterpret_cast
static_cast
true
bool型においてとりえる値で、真値である
typeid
typename
using
スコープ解決演算子を用いて記述するのは、多少手間であるので、usingが設けられた。

#include <iostream>
using namespace std;
wchar_t
ワイドキャラクタ型。日本語などの1オクテット内で収まらない文字コードのために定義された、長さ2オクテットの文字型。
おそらくUnicodeを表現するための型と考えられる。 しかし、処理系によっては、今は捨て去りし固定長2オクテットのUnicodeあるいはシフトJISコードのためにあるばあいがあるようだ。 文字コードは整数値をもっているが、数の整数型とは異なる型として取り扱われる
xor
排他的論理和
xor_eq

著作権1996年,1996年,1998年,1999年,2000年,2004年,2005年 © 大槻昌弥
著作者に無断で雑誌やBBS等の掲載や転載及び複製物の配布や販売などの営利目的へ利用する事を固く禁ずる。
ただし営利活動を目的としない個人的利用のため、このファイルを複製することにはいっこうに構わない。


ご意見、ご要望、ご感想は問い合わせフォームまでお願いします。

Valid XHTML 1.1