• 締切済み

Pro*CとCの間|変数の有効範囲

Cにおいて、「自動変数」と「広域変数」という区別がありますが、 Pro*Cにおいては別に「クライアント変数」と「ホスト変数」という 分け方があります。 これについて、ホスト変数をグローバルで宣言したときと 自動変数で宣言したときとで、 クライアント変数と同じような別々の使い方が出来るのでしょうか。 早い話、ホスト変数に、自動変数とグローバル変数の区別はあるのでしょうか。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

> もう少しハッキリとつっ込んでくださったほうがうれしいです。 > extern や static がCと同じ意味で「有効」か、とか。 でしたら、実際にexternやstaticを記述したもののプリコンパイル結果を確認されてみては。

参考URL:
http://otn.oracle.co.jp/document/products/oracle9i/901/develop.html#oci
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

Pro*Cのプログラマーズガイドによると、ホスト変数に対して、記憶域クラス指定子(externとかstaticとか)を指定できるとありますね。

ShiozawanoYuki
質問者

お礼

ありがとうございます。  ん~。 また微妙な表現ですね。 何せ当方恥ずかしながら即席プログラマなもので、まともなマニュアルもないゆえに、“あれ、どうだっけ?”的な質問をしてます。 もう少しハッキリとつっ込んでくださったほうがうれしいです。   extern や static がCと同じ意味で「有効」か、とか。

関連するQ&A

  • Oracle Pro*Cについて

    オラクル、Pro*C 初心者です。 Pro*CでのVARRAY型の操作についてですが、 よくわかりません。 例えば、 配列宣言 create or replace type varray_t as varray(100) of varchar2(100) テーブル宣言 create table v_table ( f_key char(10), f_array varray_t ) とあり、表"v_table"の検索を行いたいのですが、 Pro*Cの中でのホスト変数の宣言のしかた、 SELECTやFETCHでのホスト変数へのセットのしかたがわかりません。 手元にマニュアルがなく、また時間もないためあせっています。 どなたか、回答よろしくお願いします。

  • CとC++の変数宣言について

    なぜC言語では変数の宣言をブロックの先頭でする必要があるのかがわかりません。 またC++がどこででも宣言できるのもなぜか教えてください

  • visual c# グローバル変数について

    visual C#でどのクラスからも使える変数(グローバル変数)を宣言するにはどうすれば良いですか?

  • PRO*Cでテーブル名にバインド変数は使えますか?

    PRO*Cのプログラムで、テーブル名とカラム名をパラメータで 受け取って、ホスト変数(バインド変数?)に代入して、 それぞれ、SELECT文等で使用できますか? PL/SQLなら出来るでしょうか? EXEC SQL BEGIN DECLARE SECTION; varchar t_name[64]; /* テーブル名 */ varchar col_name[64]; /* カラム名 */ EXEC SQL END DECLARE SECTION; /* 中略 パラメータの値をホスト変数に代入する処理を行う */ ↓以下のように出来ますか? SELECT :col_name FROM :t_name ;

  • Pro*Cについて

    Pro*Cについてすごく恥ずかしい質問をさせていただきます。 Pro*Cで何かを作る場合は、何かを買わなければならないのでしょうか? プリコンパイラのようなものが、クライアントについてくるのですが、 これでプリコンパイルして、VC++とかでコンパイルは出来ないのでしょうか?

  • C,C++に変数の初期化と処理系について

    C,C++で変数宣言したけれども初期化しないで使った場合、何らかの値を出力してしまう場合とかエラー(core dumpなども)を出して停止する場合など処理系依存ということになると思います。また、別言語ではデフォルトでゼロ指定される場合もあります。これは自動初期化とい意味で初期化がされているものに分類されます。 処理系で初期化しないで変数を利用して適当な値を出すという風になっているとしたらその理由とかメリットというのがあるものでしょうか。core dumpで処理が停止するというのは当然であり、良心的とも言えるわけで、適当な値を出すことは危険極まりないと思うのですが。 Windowsで、分子・分母の変数を定義しないで割り算したところ、256な数値が出ました。 Linuxではcore dumpになるところだと思います。 初期化して使え、ということを徹底するべきですが、逆に初期化しないでも(すなわち変数としてどのアドレスに対応しているか不明であっても?)計算を進めてしまうメリットがどこかにあるのか?という疑問が生じます。 いかがでしょうか。そこが分かれば尚更変数を初期化して使う習慣が身に着くと思うわけですが。

  • C#での変数スコープ?

    Net 2.0のC#で同一名の変数を使う場合について質問いたします。 以下のHoge1の場合には「 ローカルの変数 'x' をこのスコープで宣言することはできません。これは、'親またはカレント' スコープで別の意味を持つ 'x' の意味が変更されるのを避けるためです。」と怒られます。 一方、Hoge2の場合には怒られません。 Hoge2内でx=1;ではなくint x=1;と再宣言しているにもかかわらず怒られないのは、Hoge1が厳格にスコープ管理している点からみると意外に感じられます。 http://www.atmarkit.co.jp/ait/articles/0210/16/news001_5.html の記述を見ると、この記事が書かれた2002年ごろにはHoge2もNGだったような印象を受けるのですが、変化があったのでしょうか? この辺りの事情に詳しい方がおられましたらよろしく、お願い申し上げます。 class Class1 {    private void Hoge1()    {       int x;       {          int x = 2; // これはNG!。「ローカルの変数 'x' をこのスコープで宣言することはできません。これは、'親またはカレント' スコープで別の意味を持つ 'x' の意味が変更されるのを避けるためです。」と怒られる。       }    }    int x;    private static void Hoge2()    {       int x=1; //これはOK!親にぶらさげた変数が通る。    } }

  • C#変数の扱い

    C#(VS)でデスクトップアプリを開発しています。 初歩的な質問です。 メソッド内で、宣言した変数を使おうとすると 「宣言されているが割り当てられていない。。」 といって使えません (因みに、intは使えますが、string[]はだめです) そもそも、宣言と割り当ての違いはなんですか また、よく 「。。メソッド’****’のオーバーロードはありません」 が出ます これはどういう意味で どう対応すれはいいですか。 入門書等いろいろよみましたが、 実際になるとわからないことが多いす。 よろしくお願いします。

  • C#で変数を文章中に表示したい。

    C#を勉強し始めました。ちなみにC言語の基礎はわかっているつもりです。質問なんですが、変数を文章中に表示するにはどうすればいいのでしょうか? 1、変数Aを宣言 2、A=10を代入 3、文章{あれは「A(=10)」である。} 1、2はわかるのですが、こういうのが作りたいのですが、文章中に変数を表示する方法がわかりません。簡単すぎて検索にもひっかからないようです(^^;

  • c# 配列変数の宣言について

    c#の配列変数の宣言についてですが、 以下の2つの宣言は同じことなのでしょうか。 (1)int[] num = {1,2,3}; (2)int[] num = new int{1,2,3}; 本では(2)のような定義していますが何かルールのようなものがあるのでしょうか。 宜しくお願いします。

専門家に質問してみよう