構造体名のstaticについて – プログラミング – Home

構造体名のstaticについて
 
通知
すべてクリア

[解決済] 構造体名のstaticについて


やっちゃん
 やっちゃん
(@やっちゃん)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

C/C++について質問です。

構造体を下記ように宣言しました。
これはプログラム上、許されるのでしょうか?

-------------------------------
static struct STR_TYPE {
  ・・・
}

static struct STR_TYPE a_str;

-------------------------------

構造体STR_TYPEの宣言時に記載されているstaticは、どこにかかるのでしょうか?
もしかして、a_strの宣言時にstaticを省略してもstatic宣言されるのでしょうか?

知ってみえる方、ご助言宜しくお願い致します。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

実際にコンパイルしてみればわかると思いますが、
コンパイラはお持ちでないのでしょうか?

MSDNより:
|記憶クラス指定子
|C++ の記憶クラス指定子は、宣言するオブジェクトまたは関数の記憶期間と可視性、オブジェ
|クトを格納する場所を指定します。

構造体の宣言自体は実体を持たないので、
記憶クラス指定子(staticなど)を付けることは出来ません。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

>構造体の宣言自体は実体を持たないので、
>記憶クラス指定子(staticなど)を付けることは出来ません。

C言語に関しては,付けることはできますよ。
意味論として無意味なのは確かですが。


返信引用
やっちゃん
 やっちゃん
(@やっちゃん)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

ご助言ありがとうございます。

質問内容はC言語での内容でした。
コンパイラは有るのですが、C言語ということもあり
エラーが出なかったために質問させていただいたのですが、
その背景の説明が不足していました。
  すみません。

無意味ということは、下記のように宣言しても
static宣言されないということですね?

-------------------------------
static struct STR_TYPE {
  ・・・
}

struct STR_TYPE a_str; ←static削除

-------------------------------

理解しやすいプログラムとしては、構造体側のstaticを削除したほうが
良いということですね。

理解しやすい、良いプログラムを作るためにまた質問させていただくかもしれませんが、
その際は、宜しくお願い致します。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

>static struct STR_TYPE {
>  ・・・
>}
最後に;が抜けていますね。
static struct tag {};
の形の場合,タグ自体は外部リンケージを持たないため,
内部リンケージを指定するstaticに意味はありません。

>struct STR_TYPE a_str; ←static削除

static struct STR_TYPE a_str;

struct STR_TYPE a_str;
は,リンケージが異なります。

struct STR_TYPEの宣言時にstaticが付いていたかどうかに関わらず,
a_strの定義時にstaticが付いていなければ外部リンケージを持ち,
staticが付いていれば内部リンケージを持ちます。
#ファイルスコープで定義した場合。


返信引用
やっちゃん
 やっちゃん
(@やっちゃん)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

>static struct STR_TYPE a_str;
>と
>struct STR_TYPE a_str;
>は,リンケージが異なります。
失礼しました。<(__)>

自分では、構造体タグ名のstaticを消去したつもりだったのですが。。。
(いいわけ:朝、ドタバタしていたもので間違えてしまいました)
(^o^;)

ご指摘ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました