C言語なら俺に聞け! Part 88

このエントリーをはてなブックマークに追加
>>911
剽窃だからじゃない
不正確だからちゃんとソースを確認して正確に引用しろといってるだけ
914912:04/08/14 17:45
おっと、、、
915デフォルトの名無しさん:04/08/14 17:47
>>910
× struct s { int x; int y; }; が構造体の定義で、
○ struct s S;が構造体変数の定義じゃないの?
プログラミング言語Cの表記見ればいいんじゃない。
いけいけダルビッシュ〜
918燃料投下(^^!:04/08/14 18:10
>>struct s { int x; int y; };
>これは宣言

型の定義(^^!

>>struct s;
>これは不完全型の宣言

型の宣言(^^!
919デフォルトの名無しさん:04/08/14 18:16
>>918
不発

思考停止したアフォは放置
920デフォルトの名無しさん:04/08/14 18:27
おまえらだめすぎ
921デフォルトの名無しさん:04/08/14 18:28
extern int i; /* これは宣言 */
static int j; /* これは定義 */
共産党○○ /* これは宣言 */
ウィルス○○ファイル /* これは定義 */
○○温泉
924デフォルトの名無しさん:04/08/14 18:50
白骨温泉
>>912
京都負けちゃったね
926867:04/08/14 20:07
おい、本屋でこの本の293Pでも立ち読みしてみぃ、ちゃんと説明でてるからぁ。
http://www.amazon.co.jp/exec/obidos/ASIN/477410843X/249-1598953-0831507

あとぉ、ネット検索しても本当に少しだけだけど触れているページだってあるぞぉぉ!w
K&RまたはANSI/ISO Cの規格書以外のソースは却下
928デフォルトの名無しさん:04/08/14 20:10
>>926
この本を正規購入して読め、「本当に少し」の理由がわかるはず
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+3010%3A2003&dantaiCd=JIS&status=1&pageNo=0
929867:04/08/14 20:14
>>928
ほい、みてみまつ。
930デフォルトの名無しさん:04/08/14 20:28
>>918
今時 struct をそのまま使う香具師の気が知れない。
使うなら、

typedef struct mytype_ {/* mytype_ は自分の構造体の中で mytype へのポインタが
                  出てくる場合のみ */
・・・・・
} mytype;

という「熟語」を使うのが常套手段。
>>930
構造体かどうかの区別がつきにくくなるだろ!
932デフォルトの名無しさん:04/08/14 20:42
>>930
俺も>>931に同意だけど、好きな方使えばいいんでない?
だから素直にstruct ***とやっている人を馬鹿にしてはいけない



なんてカッコつけて言ってみたw
がびーん、>926の本持ってた...。

p.293 19.3.3 宣言と定義のセクションより引用
>変数宣言は, 宣言であり, かつ定義でもある.
>(中略, 定義と宣言についての説明がある)
>変数宣言のように宣言と定義が同時に行われるのを定義宣言という.

強調されて書かれてるしw → 定義宣言
934デフォルトの名無しさん:04/08/14 20:46
>>931
変数の意味も分からずに使うことはまず無いので無問題。
変数の宣言・定義の度に struct を打つのは無駄。

関数だったら、何も分からなくても

sometype myfunc(mytype a, mytype2* b, ・・・)
{
・・・
}

とかで済むし、必要があれば a.member, b->member2 とすれば良いし、
構造体でない型の変数でドットやアローを付けてしまっても syntax error になるだけだから、
一切問題は起こらない。

では、問題になるケースというのは?
935デフォルトの名無しさん:04/08/14 20:48
>>932
どちらも間違いではないけど、既製のヘッダファイルを見ればほぼ例外なく
typedef struct と書いてある。
936デフォルトの名無しさん:04/08/14 21:05
>>933
焚書推奨
937デフォルトの名無しさん:04/08/14 21:20
>>936
       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   え? なんだって?
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |
6.9.2 External object definitions
Semantics
1 If the declaration of an identifier for an object has file scope and an initializer, the
declaration is an external definition for the identifier.
2 A declaration of an identifier for an object that has file scope without an initializer, and
without a storage-class specifier or with the storage-class specifier static, constitutes a
tentative definition. If a translation unit contains one or more tentative definitions for an
identifier, and the translation unit contains no external definition for that identifier, then
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.
3 If the declaration of an identifier for an object is a tentative definition and has internal
linkage, the declared type shall not be an incomplete type.
4 EXAMPLE 1
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage
extern int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to pre vious
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to pre vious
int i4; // valid tentative definition, refers to pre vious
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to pre vious, whose linkage is external
extern int i2; // refers to pre vious, whose linkage is internal
extern int i3; // refers to pre vious, whose linkage is external
extern int i4; // refers to pre vious, whose linkage is external
extern int i5; // refers to pre vious, whose linkage is internal
939デフォルトの名無しさん:04/08/14 22:06
>>934
自分が使いやすいと思ったほうを
使うのが一番だと思われ。
そんなムキになるようなことじゃない。
940デフォルトの名無しさん:04/08/14 22:08
>>939
ムキになることじゃない、この点はよい
ただし理由がおかしいよ
941デフォルトの名無しさん:04/08/14 22:14
>>940
え?
何かおかしい?
別に普通の理由だと思うが?
942デフォルトの名無しさん:04/08/14 22:16
自分が
943デフォルトの名無しさん:04/08/14 22:45
Cのsocketプログラミングについて質問させて下さい。
最初にWSAData構造体に何が格納されているかを表示させるプログラムを
書いたのですがいきなり躓きました。
以下のようなコードを書いたのですが
wVersion=257
wHighVersion=514
という結果が出ました。
自分の環境だとwVersion=1.1,wHighVersion=2.2になると思ってたのですが
何故こんな結果になってしまったのでしょうか?

#include <winsock.h>

//以下main文
WSADATA wsadata; //WSADATA型変数宣言

if(WSAStartup(MAKEWORD(1,1),&wsadata)){
printf("WSAStartup関数失敗です\n");
return -1;
}
printf("wVersion=%u\n",wsadata.wVersion);
printf("wHighVersion=%u\n",wsadata.wHighversion);
printf("szDescription=%s\n",wsadata.szDescription);
944デフォルトの名無しさん:04/08/14 22:47
>>943
%uで小数が表示されるわけないだろ
945デフォルトの名無しさん:04/08/14 22:59
>>944
はう、お盆なので親戚が来てかなり酒が入ってる状態です
お許しください
俺が書きたかったのは下のコードでした
printf("wVersion=%d.%d",LOBYTE(wsadata.wVersion),HIBYTE(wsadata.wVersion));

じゃあ、
printf("wVersion=%u\n",wsadata.wVersion);
printf("wHighVersion=%u\n",wsadata.wHighversion);

wVersion=257
wHighVersion=514
は何なんでしょうか?
脳が既に活動停止しているようです。
とっとと,お帰り下さい。
wVersion=MAKEWORD(1,1)
wHighVersion=MAKEWORD(2,2)
WORD型で定義されてるから。
%hsにしる。

# そもそもスレ違い
あら?typoしてまってた。%hdだ。

その点は確かにそうだけど
その点での誤動作は絶対にしないんだな。

intサイズ以下の整数を可変引数をとる関数(の可変引数部)に渡すと
必ずint型に格上げされるからね。
ああ。そうだった。ついでに、floatもdoubleに格上げされるんだったね。
痛いな。俺。

wVersion == 0x0101
だから257
951デフォルトの名無しさん:04/08/15 04:09
> おい、本屋でこの本の293Pでも立ち読みしてみぃ、ちゃんと説明でてるからぁ。

有名な「ダメ本」じゃん。
952デフォルトの名無しさん:04/08/15 04:10
> 変数宣言は, 宣言であり, かつ定義でもある.

こういうウソを平気で書いている本を買うなよなあ。

953デフォルトの名無しさん:04/08/15 04:11
> はう、お盆なので親戚が来てかなり酒が入ってる状態です

あと2週間も先だろ > お盆
>>953
お前はどこの国の人間だ?
お盆の時期

毎年、七月十五日を中心に、十三日を迎え盆、十六日を送り盆といい、
十三日から十六日までの四日間を、お盆の期間とします。ただし、
旧暦の七月十五日や、月遅れの八月十五日を中心にお盆をつとめるところもあります。

本来は、仏教の行事だったお盆ですが、働く人は盆休みをこの時期にとり、
故郷のある人は帰り、盆踊りをして楽しみ、生きている私たちの生活のなかに、
しっかりと根ざしている、夏の季節の節目となっています。
956デフォルトの名無しさん:04/08/15 04:28
> 本来は、仏教の行事だったお盆ですが、働く人は盆休みをこの時期にとり、

もともと仏教なんかよりはるか以前からある行事でしょ
それを否定するわけにはいかないので、仏教でもそれをoverloadしただけ。
(お盆っていう言い方もそのとき以来のもの)

キリスト教でも「そうそう! イエス様は12月24日生まれだったんですよ!」ってことに
して、古くからある冬至のイヴェントをoverloadしたように(本当は4月上旬生まれらしい)。
957デフォルトの名無しさん:04/08/15 04:33
仏教でも「そうそう、お釈迦様のありがたいおことばにこんなのがあります!」と
7月15日の行事を肯定するためのにせもののお経をでっち上げて、
(中国語じゃなくてサンスクリット語で!)そうまでしてoverloadする必要が、
中国南部と北部ではあったわけだ (中央部では民族に違いによりなかった)。

でも、そんなお経よりはるか以前から、日本の島々では、7月15日に先祖の霊を
うやまうための行事がずっと行われていた。
958デフォルトの名無しさん:04/08/15 04:46

それは日本や沖縄も客家の人たちと同じ祖先の血をひいているから。
インドよりももっと西方、いまのイランやイラクあたりから来た人たちだから。

そもそも「お盆」というネイミングも、イラン語系の古い言葉で精霊を意味するurvan -> サンスクリット語のullanbana -> 盂蘭盆 -> お盆
となったもの。
959デフォルトの名無しさん:04/08/15 04:48
なので、7月15日の満月の晩にやらなきゃいけない行事なので、
日付をずらすのはナンセンス。
お正月と七月の行事は日付の変更はあり得ない。
5月の行事は生きているひとのほうの都合である程度の変更は許されている。
ちょっと待って
>イランやイラクあたりから来た
>日付をずらすのはナンセンス
と言うなら、日本の太陽太陰暦(いわゆる旧暦)で日付を決めるのは変でない?
だから満月を基準にしてるんでしょ?
7月は、何を基準に7月なの?