
C言語です。
使用環境はμITRONです。
つい最近、今まで見かけたことのないコードを見まして
それが、正しく動作するのか教えて頂きたく考えております。
コードは下記の通りです。
/****************************************/
void aaa( void )
{
char *bbb = NULL;
if(dog > cat)
{
bbb = "あいうえお";
}
else
{
bbb = "かきくけこ";
}
ccc(bbb);
}
このif-elseブロック内で確保される"あいうえお"文字列や"かきくけこ"文字列の
アドレスの有効範囲はどこになるのでしょうか?
if-elseブロック内でしょうか?
それともaaa()関数内でしょうか?
勉強不足で申し訳ありませんが、よろしくお願い致します。
また、その後学のためにその根拠(参考文献や考え方など)も教えて頂ければなお有難いです。
No.2ベストアンサー
- 回答日時:
まず,言葉の定義から。
・有効範囲 (scope)
その識別子が利用可能である,領域の範囲。
関数有効範囲 (function scope),ファイル有効範囲 (file scope),ブロック有効範囲 (block scope),関数原型有効範囲 (function prototype scope) の4種類がある
ISO/IEC 9899:1999 (以下 IS) 6.2.1 Scopes of identifiers
JIS X 3010:2003 (以下,JIS) 6.2.1 識別子の有効範囲
・記憶域期間 (storage duration)
そのオブジェクトの生存期間の範囲。
静的記憶域期間 (static storage duration),自動記憶域期間 (automatic storage duration),割付け記憶域期間 (allocated storage duratoin) の3種類がある
IS 6.2.4 Storage durations of objects
JIS オブジェクトの記憶域期間
文字列リテラルは識別子がないですから,有効範囲はありません。
IS 6.4.5 String literals (JIS 6.4.5 文字列リテラル) の第5段落において,文字列リテラルは静的記憶域期間を持つ,と定められています。
# 正確には「文字列リテラル又はその並びから得られる多バイト文字の並び」が静的記憶域期間を持ちます。
なお,静的記憶域期間はIS/JIS 6.2.4の第3段落に依れば,「その生存期間はプログラム実行の全体とする」と定められています。
ただし,コンパイラが標準に準拠していない場合,以上の話は成り立ちません。
コンパイラのマニュアルを調査する必要があります。
No.3
- 回答日時:
"あいうえお"と"かきくけこ"は文字列定数ですので生存期間はstaticと同じです。
つまり、プログラムと同一の生存期間となります。アドレスも、その期間だけ有効です。根拠は規格書を見てもらうぐらいしかないですね。
「日本工業標準調査会:データベース-JIS詳細表示 JISX3010 プログラム言語C」
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D …
オンライン閲覧のみ可。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
文字列からタブコードを取り除...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
複数文字列から共通文字列の抽...
-
エクセルで文字列の最大値を抽...
-
ACCESSのSQLでのカンマ’認識に...
-
(エクセル)複数のセルの数値...
-
EXCELで=より左の文字を一括で...
-
textboxユーザーコントロールの...
-
変数内に入った文字列の結合 UWSC
-
ORCLEでの小数の表示方法の変更...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
aaa.bbb.ccc という、「ドット...
-
エクセルでSQLでいうところの「...
-
Left関数とRight関数を合わせた...
-
Pro c/c++ でホスト変数の後に....
-
A B C D E の五文字のすべてを...
-
アクセスでのインポート時の改...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
エクセルで文字列をtxtファイル...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
VBの「As String * 128」とは?
-
VBA2005 16進を2桁で表示したい。
-
Excelで3E8を3.00E+8にしない方...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
-
アクセスで特定の数字以外(複...
-
エクセル 数値データを桁をそ...
-
Msgboxの×が押されたとき
-
ORCLEでの小数の表示方法の変更...
-
VBAを使って選択した範囲の数字...
-
MS SQLServer のSQLで文字列の...
-
同一セル内に関数と文字列を同...
-
Pro c/c++ でホスト変数の後に....
おすすめ情報