掲示板利用宣言

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

 私は

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

掲示板2

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

No.24855

typedefについて
投稿者---zero(2005/12/18 01:58:12)


環境はLinux(gcc)です。

例えば以下のソースの場合、

#include <stdio.h>
#include <stdlib.h>

typedef int USER;
typedef double UESR;

int main(void) {

    printf("siseof(USER):%d\n", sizeof(USER));

    exit(0);
}



USERはint型でしょうか?double型でしょうか?
このソースの結果は、

siseof(USER):4

となります。また上記ソースのtypedefの宣言順序を変えても結果は同じです。
私の処理系ではsizeof(double)は「8」となります。

まとめると以下の3つの疑問があります。
1. 上記のソースのようにtypedefを宣言した場合USERは何型になるのか?
2. 既にソースの前半で宣言されているtypedefを無効にする方法はあるのか?
(#undefのようにUSERにまた別の型を設定する方法という意味)
3. なぜ上記ソースのtypedefの宣言順序を変えても出力される結果は同じなのか

3点についてご教授よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:typedefについて(謝辞&削除依頼) 24856 zero 2005/12/18 02:16:25


No.24856

Re:typedefについて(謝辞&削除依頼)
投稿者---zero(2005/12/18 02:16:25)


とんだ早とちりをしてしまいました。
typedef宣言のUSERのつもりが、下のが「UESR」とスペルを間違えていました。

>typedef int USER;
>typedef double UESR;

スペルミスを修正すると、コンパイラに以下のように怒られました。

demo.c:5: error: conflicting types for 'USER'
demo.c:4: error: previous declaration of 'USER' was here

大変お恥しいかぎりです。
管理人樣、御手数だとは思いますがこのスレッドを削除していただけると
助かります。(削除用パスワードを入れるのを忘れてしまいました。(以後気をつけます。)


この投稿にコメントする

削除パスワード

No.24860

Re:typedefについて(謝辞&削除依頼)
投稿者---RAPT(2005/12/18 03:30:29)


他にも似たようなミスをした人が、このログによって、問題が解決する
可能性もあるので、むやみと削除する事は好ましくありません。


この投稿にコメントする

削除パスワード

No.24863

Re:typedefについて(謝辞&削除依頼)
投稿者---管理人(2005/12/18 10:03:01)


>他にも似たようなミスをした人が、このログによって、問題が解決する
>可能性もあるので、むやみと削除する事は好ましくありません。

zeroさんのお気持ちもあるのですが、残しておいてもいいですよね。
ご了承ください。

#騒いだ挙句よく見たら…、というのは人間だから誰しもありますよね。


この投稿にコメントする

削除パスワード

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