ここから本文です

Visual C++ 2010に関する質問です。 「array」という単語は,予約語か何かなの...

長里予 広禾念さん

2019/12/404:06:39

Visual C++ 2010に関する質問です。

「array」という単語は,予約語か何かなのでしょうか?

入力すると,予約語の様に,青文字になります。

しかし,コンパイルエラーになったりはしません。

Visual C++,C言語,gcnew array&lt,マネージコード,プログラミング言語,コンパイルエラー,予約語

閲覧数:
55
回答数:
3

違反報告

ベストアンサーに選ばれた回答

abiko_tetuさん

2019/12/411:27:46

arrayは、マネージコード(意味は後述)による配列です。
以下に説明します。



[Visual C++で使えるプログラミング言語]
Visual C++で使えるプログラミング言語は、C言語とC++とC++/CLIです。
このC++/CLIの説明は後にして、このC++/CLIに関連するプログラミング言語として、C++/CXやC++/WinRTがあります。
よって、Visual C++で使えるプログラミング言語は、正確に言い直しますと、C言語とC++とC++/CLIとC++/CXやC++/WinRTになります。
C++/CLIやC++/CXやC++/WinRTで、array等のマネージコード系の機能(意味は後述)が使えます。



[インターネットで使われているプログラミング言語と使われていないプログラミング言語について]
ところで、インターネットでは、個々の企業の技術に依存してはいけないルールです。
よって、インターネットでは、基本的に標準化団体に認可された技術を使います。
ただし、標準化団体に認可されていない技術も、インターネットで使われています。
標準化団体に認可されていなくても、世の中から、「これは、殆ど標準的な存在だろう」と認められているのであれば、インターネットで使えます。
このインターネットの考え方に適合したプログラミング言語には、Java、C#、Python、Ruby等々があります。
逆に、インターネットの考え方に適合していないプログラミング言語は、C言語やC++です。
C言語とC++は、個々のOSの仕様に依存させて、そのOSの性能を十分に活かします。
また、C言語とC++は、個々のハードの仕様に依存させて、そのハードの性能を十分に活かします。
インターネットとは、全く逆の考え方です。
よって、C言語とC++は、間接的にはインターネットで使えますが、直接的には使えません。
なお、両者の構造的な大きな違いは、ガベージコレクションと言うメモリ管理用のプログラムを使っているか、使っていないのか、と言う違いです。
Java、C#、Python、Ruby等は、直接メモリをアクセスせずに、ガベージコレクションが管理する仮想的なアドレス空間にアクセスします。
これに対して、C言語とC++は、ガベージコレクションを使わずに、直接メモリにアクセスします。



[マネージコードとネイティブコードについて]
ガベージコレクションを活用しているプログラミング言語(Java、C#、Python、Ruby等)によって書かれるコードをマネージコードと言います。
ガベージコレクションを使わないプログラミング言語(C言語やC++)によって書かれるコードを、アンマネージコード、またはネイティブコードと言います。



[C++/CLIとC++/CXについて]
C++/CLIは、マネージコード(C#等の.NET系のコード)とネイティブコード(C言語やC++のコード)の両方を扱えるプログラミング言語です。
例えば、ユーザーインターフェイス(ユーザーが直接操作するプログラム部分)をマネージコードで記述し、それ以外を標準C++で記述することが可能になります。
その後に、同じくマネージコードとネイティブコードの両方を扱えるプログラミング言語として、C++/CXが登場しています。
両者の違いは、C++/CLIの方は、マネージコード(C#等の.NET系のコード)をベースにして、ネイティブコード(C言語やC++のコード)も扱えると言うものです。
これに対してC++/CXは逆で、ネイティブコード(C言語やC++のコード)をベースにして、マネージコード(C#等の.NET系のコード)も扱えると言うものです。
すなわち、C++/CLIは、C#等の.NET系を重視しています。
C++/CXは逆で、C言語やC++のネイティブコード系を重視しています。



[C++/WinRTについて]
C++/CXは、Linux Foundationが、高く評価しました。
よって、それに答えて、C++/CXをもっと本格的にしたのが、C++/WinRTです。
C++/WinRTは、C++/CXと同じように、ネイティブコード(C言語やC++のコード)をベースにして、マネージコード(C#等の.NET系のコード)も扱えると言うものです。
ところで、Microsoftは、以前からCOMと言うC++系のテクノロジーを持っています。
そして、MicrosoftはC#で作って来た標準技術をC++に適合させました。
すなわち、MicrosoftのC++系テクノロジーであるCOMを、インターネットで扱えるようにしました。
このインターネット対応版のCOMを、Windowsランタイム (略称: WinRT)と言います。
C++/WinRTは、このWinRTを基本機能として扱える、ネイティブ、マネージ両者対応言語と言うことです。



[一次元配列のマネージコードとネイティブコードの比較]

<ネイティブコードの場合>

int a[3];
a[0] = 7;
a[1] = 5;
a[2] = 3;


<マネージコードの場合>

array<int>^ a = gcnew array<int>(3);
a[0] = 7;
a[1] = 5;
a[2] = 3;



[多次元配列のマネージコードとネイティブコードの比較]

<ネイティブコードの場合>

int a[4][2][3];
a[0][0][0] = 7;
a[0][0][1] = 5;
a[0][0][2] = 3;
a[0][1][0] = 1;
a[0][1][1] = 2;
a[0][1][2] = 3;
a[1][0][0] = 2;
a[1][0][1] = 4;
a[1][0][2] = 6;
a[1][1][0] = 9;
a[1][1][1] = 8;
a[1][1][2] = 7;
// 略
a[3][1][0] = 5;
a[3][1][1] = 6;
a[3][1][2] = 7;


<マネージコードの場合>

array<int,3>^ a = gcnew array<int,3>(4,2,3);
a[0,0,0] = 7;
a[0,0,1] = 5;
a[0,0,2] = 3;
a[0,1,0] = 1;
a[0,1,1] = 2;
a[0,1,2] = 3;
a[1,0,0] = 2;
a[1,0,1] = 4;
a[1,0,2] = 6;
a[1,1,0] = 9;
a[1,1,1] = 8;
a[1,1,2] = 7;
// 略
a[3,1,0] = 5;
a[3,1,1] = 6;
a[3,1,2] = 7;



[Visual C++で、マネージコードが重要視されていることについて]
Microsoftがインターネット市場に参加し始めた当時、インターネット上でCOMを使えるようにしました。
しかし、Javaを作ったSun Microsystemsと言う企業が、Microsoftを裁判で訴えました。
そのため、C++を直接インターネット上で使うのは、禁止されました。
Microsoftに限らず、どの企業でも、どの組織でも使えません。
そこで、Microsoftは、マネージコードとネイティブコードの両方を使えるC++/CLIと言うプログラミング言語を作りました。
これで、標準C++をインターネットで使えるようになりました。
処理の本体を標準C++で記述し、インターネットに関わる部分をマネージコードで書けばよいのですから。
ただし、C++/CLIは、普及しませんでした。
Microsoft系開発環境としては重要ですが、Microsoft以外には普及しませんでした。
一応C++/CLIは、標準化団体のECMAに認可されていますが、「Microsoftが作ったプログラミング言語」と言うイメージのほうが強く、他には受け入れられませんでした。
そこで、C++側よりに重視したC++/CX(後のC++/WinRT)が作られました。
これに対しては、Linux Foundationが、くいつきました。
Linux FoundationとMicrosoftが、がっちり手を組んで、C++をインターネットで活用して行きます。
具体的には、IoT機器によるユビキタスの時代を実現させるそうです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/12/5 07:04:35

承知致しました。
皆様、御回答ありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

prwssさん

2019/12/410:58:55

>「array」という単語

はい

予約語か何かです

array - cpprefjp C++日本語リファレンス
https://cpprefjp.github.io/reference/array/array.html

プロフィール画像

カテゴリマスター

n2q********さん

2019/12/408:40:04

同じ質問が上がっていました。

https://stackoverflow.com/questions/372580/why-is-array-marked-as-a...


《参考》

言語上は予約語ではないわけですが、エディタの上では何らかの意図で青くしていると思われます。

ところで、C++/CLI でプログラムを作る場合は gcnew によって配列を作成します。C++/CLI ではない通常の C++ においては gcnew というキーワードは存在しないわけですが、やはりこの gcnew もエディタ内では青くなります。

エディタ側として C++/CLI かどうか判断できないということも無い筈です。(IntelliSense と連動している筈だから)

もしかすると、そのような連動によって色を決定するロジック前の古いロジックが発動しているのかもしれません。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる