掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28619

変数名について
投稿者---あきき(2006/10/29 00:35:19)


いつも拝見させて頂いております。

今回は、変数名の設定についての素朴な疑問なんです。
例えば、構造体変数は、typedefして変数名を「 div_t 」等としている場合があります。
この様にtypedefされた語は、予約語と同様な扱いを受け、任意に変数名を決める時、
ダブらない様にしないといけないのでしょうか?



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:変数名について 28620 たかぎ 2006/10/29 02:03:04
<子記事> Re:変数名について 28622 かずま 2006/10/29 12:09:25


No.28620

Re:変数名について
投稿者---たかぎ(2006/10/29 02:03:04)
http://takagi.in/


>この様にtypedefされた語は、予約語と同様な扱いを受け、任意に変数名を決める時、
>ダブらない様にしないといけないのでしょうか?

早い話がそうです。
ただし、正確には、「予約語」ではなく、「予約済み識別子」です。
さらに細かなことをいうと、div_tの場合、(一般名前空間とは)異なる名前空間の識別子として使用することが(規格上は)可能です。
具体的には、関数原型の仮引数名、ラベル名、タグ名、メンバ名として使用する分には問題ないということです。




この投稿にコメントする

削除パスワード

No.28621

Re:変数名について
投稿者---かずま(2006/10/29 03:00:07)


> さらに細かなことをいうと、div_tの場合、(一般名前空間とは)異なる
> 名前空間の識別子として使用することが(規格上は)可能です。
> 具体的には、関数原型の仮引数名、ラベル名、タグ名、メンバ名として
> 使用する分には問題ないということです。

名前空間の分類は、「ラベル名、タグ名、メンバ名、その他」です。
関数原型の仮引数名は、名前空間ではなくスコープ(有効範囲)により使用可能
となります。

スコープには、「関数、ファイル、ブロック、関数原型」の 4種類があります。
関数スコープを持つものは、ラベル名だけです。
関数原型スコープを持つものは、関数原型の仮引数名だけです。
ブロックスコープを考えれば、局所変数としての div_t は使用可能です。
#include <stdio.h>  /* printf */
#include <stdlib.h> /* div_t */

int main(void)
{
    int div_t = 3;
    printf("%d\n", div_t);
    return 0;
}



この投稿にコメントする

削除パスワード

No.28623

Re:変数名について
投稿者---たかぎ(2006/10/29 14:28:32)
http://takagi.in/


>名前空間の分類は、「ラベル名、タグ名、メンバ名、その他」です。
>関数原型の仮引数名は、名前空間ではなくスコープ(有効範囲)により使用可能
>となります。

失礼。そうでした。


この投稿にコメントする

削除パスワード

No.28622

Re:変数名について
投稿者---かずま(2006/10/29 12:09:25)


> 例えば、構造体変数は、typedefして変数名を「 div_t 」等としている場合があります。

div_t は「変数名」ではありません。型定義名(typedef name)です。


> この様にtypedefされた語は、予約語と同様な扱いを受け、任意に変数名を決める時、
> ダブらない様にしないといけないのでしょうか?

型定義名、変数名(オブジェクト名)、関数名は、名前空間が同じなので、
同じスコープ(有効範囲)では同じ識別子(名前)を使用できませんが、
異なるスコープでは同じ名前を別の意味で使用できます。


この投稿にコメントする

削除パスワード

No.28625

Re:変数名について(解決)
投稿者---あきき(2006/10/29 20:58:31)


>型定義名、変数名(オブジェクト名)、関数名は、名前空間が同じなので、
>同じスコープ(有効範囲)では同じ識別子(名前)を使用できませんが、
>異なるスコープでは同じ名前を別の意味で使用できます。

たかぎさん、かずまさん回答ありがとうございました。
そして、型定義名のご指摘ありがとうございます。

それにしても変数のつけ方って、奥が深いですね。理解が深まりました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧