トップページ⇒tech
1001コメント277KB

C言語のことは漏れらに聞け!!<サンキュー>

■ このスレッドは過去ログ倉庫に格納されています
0001前スレ949NGNG
前スレのコピペだモルァ

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <38>
http://pc3.2ch.net/test/read.cgi/tech/1035729526/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0232デフォルトの名無しさんNGNG
>>218なぜ&hoge[0]がhogeのシンタックスシュガーになるんだ?
0233デフォルトの名無しさんNGNG
マクロを関数のように使うなら、せめて関数が使えるところではどこでもそのマクロを使えないとねぇ・・・
0234デフォルトの名無しさんNGNG
>224
問題にしているのは、「&hoge[0]」(ポインタ)に付いてではないのか?
いつから、hoge(配列)の話になったんだ?
0235デフォルトの名無しさんNGNG
Cで構文糖といったら、char s[]="abc"とかアロー演算子くらいな気がする。。。
他にもあるかな?
0236デフォルトの名無しさんNGNG
プリプロセッサは排除の方向で世の中進んでるのに・・・もう定年する覚悟ですか?
0237デフォルトの名無しさんNGNG
>>229
単文だからでは?
このスレの半分以上は前スレの話題を引き継ぐな。
c faq読めよ…。
0238デフォルトの名無しさんNGNG
forだけでなく、コンマ演算子もつかえねーじゃん。
話にならねー。
0239デフォルトの名無しさんNGNG
>>231
たかがelseの前で構文エラーになるかならんかの違いだろ。
個々のコーディングスタイルに依存する話を、
誰でも役に立つと決め付けんな。
むしろ邪魔になることもある。

そういう俺は個人的には使ってるけどな。
0240デフォルトの名無しさんNGNG
>>235
int main(int argc, char **argv);
int main(int argc, char *argv[]);
0241デフォルトの名無しさんNGNG
>>240
ああそうか。仮引数のポインタを[]と書くのも構文糖だね。
ポインタを受ける時は配列を受ける時が多いから。
0242デフォルトの名無しさんNGNG
>>241
K&R厨が出てくるぞ。
0243225NGNG
>>234
> 問題にしているのは、「&hoge[0]」(ポインタ)に付いてではないのか?
> いつから、hoge(配列)の話になったんだ?

多分お前は話を理解できてないな。
その &hoge[0] が即値とどう関係してくるのかという疑問なんだが。
0244デフォルトの名無しさんNGNG
>>231
結局好みでしょ?
オレもこの手の問題は通りぬけたけど
マクロなんか全然使わない。
関数書くのが楽しいからw
0245デフォルトの名無しさんNGNG
考えてみたら、&hoge[0] は即値になりようが無いな。
実行するまで、hoge が決まらない。
実際、コンパイラは lea を吐くと思う。
0246デフォルトの名無しさんNGNG
つーか漏れはマクロで複文なら do { ... } while(0) だが、実際マクロ関数を
最近全然書いてない。
SWAP() 程度の処理なら直書きしてる。型もまちまちだし。
0247231NGNG
>>246
>型もまちまちだし
マクロは型に依存しないんだよ?
0248デフォルトの名無しさんNGNG
俺も滅多に書かないけど、↓最近書いた奴

#define isnullstr(str) (!*(str))
/* 空文字列かどうかを判断 */

strlen(str)==0の代わりに*str==0と書いていたけど、分かりにくいんでマクロにした。
0249デフォルトの名無しさんNGNG
>>247
おかげでしょうもないバグが起こる可能性がある。
0250デフォルトの名無しさんNGNG
>>247
あのマクロの中で定義している変数はなんだ?(^_^;)
#define SWAP(x,y,type) do{type W;・・・と書けば型によらないで使えるけど
0251247NGNG
型もまちまちってことはさ、なんらかの統一処理って事ジャン?
いちいち関数つくるよりは、直書きの法がいいけどん、
そんな時くらいしかマクロは使えましぇん!
0252最後に質問NGNG
#include<stdio.h>

int main(void)
{
int a[]={0,1,2,3,4};

printf("%d",*a); /*出力結果 0*/

return 0;
}/*なぜアドレスをポインタ変数に代入してないのに、
間接参照演算子、以下(*)が使えるのでしょうか?

*が使えるのはポインタ変数(ポインタ配列)にアドレスが
代入されていて、その変数を指している時にしか
使えないと思うんですが・・・*/
0253デフォルトの名無しさんNGNG
>>252
そもそも、a[n]って*(a+n)だぜ。
0254デフォルトの名無しさんNGNG
>>252

>>1のリンク先にあるC FAQを読んだ方がいい。
0255デフォルトの名無しさんNGNG
int a[]={1,2,3,4,5};
にして置いたら?
紛れが少なくなる。
0256デフォルトの名無しさんNGNG
ソース中では配列はポインタに読み替えられる。
宣言の時以外に使われる[]、つまり添字演算子は*と書いてもほとんど同じだ。
この辺の話は、もうちょい後でじっくり学べ!
今はとりあえず、配列の名前(この場合だとa)を単独で使うと
それは配列の先頭要素へのポインタ(つまりaは*a[0]ってこと)になる。
ただし、これは嘘だ。でも今はこう覚えといて問題なし。
実際オレもそうだったから。安心しろ
0257デフォルトの名無しさんNGNG
>>256
aは*a[0]じゃなくて&a[0]
0258256NGNG
オレ、死んでいいですか?
0259デフォルトの名無しさんNGNG
>>258
もちろん
0260デフォルトの名無しさんNGNG
>>258
死ぬべき立場なら潔く割腹。
0261デフォルトの名無しさんNGNG
sizeof(a),sizeof(&a[0])を見てみると分かり易いね。
0262デフォルトの名無しさんNGNG
>>248
それだけを見るとナイスアイディアに見えるが、その調子で作ったマクロが
ずら〜っと並んでいると読む気がしなくなる罠。
漏れは素直に !*str の方が好き。
この程度、読むのに詰まる事も無いだろうし。
0263デフォルトの名無しさんNGNG
256 よりも、255 の方が何を言っているのかわからないぞ。
0264256NGNG
遺書

僕は調子に乗りました。初心者の僕でもわかりそうな質問だったので
がんばってレスを打ちました。そしたら257にやられました。
向こうは3人がかりで僕を攻めました。お父さん、お母さん、
今までありがとう・・・・



これは自殺じゃない!他殺だ!(某あほな自殺者の迷言)
0265デフォルトの名無しさんNGNG
>>262
同感。逆のケースだと特にね。
if(*str) {}
if(!isnullstr(str)) {}
前者の方が断然読みやすく書きやすいと思う。
0266256NGNG
ほとんとだ。新たないじめられっこハケーン

でもマギレって?
マグレか?
だとしたらなんの?
0267デフォルトの名無しさんNGNG
                ,.-ー''"~"'i,
              /~   ..:::::::!.,___        ,,..、-、,
            /    .::::::::::::::`::::::~~""''''ー-,/~:::::::::.`i,
           /     .:::::::::::::::::::::;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::: i
           /      .:::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::.. |
         ,/      :::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::. i
         ,l'       ::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::. |
         l       ::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::: i   生きるって辛いよな・・・
         i,       ..:::::●:::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::: !
        _,,.i      ..::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::●::  i'
      /~  'l,    ..:::::::::::::::::::::::::::|、;;;;;;;;;;;;;;;;;/::::::::::::::::: ,i'            /~\
    /,.、-ー 、;i,   .::::::::::::::::::::::::::::::|  ~"''''"/::::::::::::::::::: /~\         /    i.,_
   /'/ ..::::::::|::' .,  :::::::::::::::::::::::::::::::|'⌒`ヽ,/;:::::::::::::::::: /:::::::.. \       ,i    .::.. \
   / i'  .::::::::::/:::::::`・、., :::::::::::::::::::::::,人,__,/;;;;;::::::::::::::::/;;;;;;:;:::::.. ヘ     /  .::::....::::::::. `.,
  ,i/( .::::::::::::i,::::::::::::;;;;;;~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::-''";;;;;;;;;;;;;;;:::::..  \  /  .:::::::::::):::::::::.. ヘ
0268デフォルトの名無しさんNGNG
。・°°・(>_<)・°°・。 ウエーン

何やっているのかわかりやすくするためにマクロにしたんだが、駄目か・・・

>>265
空文字列でない(文字列の終わりでない)という条件式は俺も上の方法でやっています。for(;*str;str++);って感じで。
0269デフォルトの名無しさんNGNG
>>253〜>>260
全て知ってます。
聞きたいことが伝わらないですかね?

たとえば、
int a=10;
int *p;

p=&a; /*アドレスを代入し、pがaを指す*/
ココ!
>>256のソースは変数を指していない。

printf("%d",*p);
ココ!指しているから*が使える。

>>256のソースではどこも指していないのに
*が使えるのはなぜですか?と聞いています。
0270デフォルトの名無しさんNGNG
>>264
い�`・・・
 ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧ ∧
  (  ,,)
  ./  |
 (___/
/
0271デフォルトの名無しさんNGNG
>>269
配列を確保した時点でアドレスは決まると思うが・・・
0272デフォルトの名無しさんNGNG
>>269
> 全て知ってます。
> 聞きたいことが伝わらないですかね?

はあ?
配列がポインタに成り下がることを知っていたら
そんなアホな疑問は出てこないはずだが?
0273デフォルトの名無しさんNGNG
>>268
それでいいじゃん。
マクロは、定数以外には基本的に使わないのが鉄則。
デバッガで追うのも面倒になるし。
0274デフォルトの名無しさんNGNG
どこを指しているのか分からないってのは、初期化していない(自動変数の)ポインタだろ?
0275256NGNG
>>269
だから、配列はポインタに変わっちゃうんだってば。
知ってるのにわからないんだったら才能ないんでない?
やめた方がいいと思うよ。
オレは0.2秒で理解した
0276デフォルトの名無しさんNGNG
>>273
わかりました・・・
今まで書いたソースを修正するのは面倒だからそれはそのままにして、今後は禁じ手にするか。。
0277265NGNG
>>268
あくまで俺個人の見解だからあまり気にしないで。

ただ、Cを使ってる人間であれば !*str という式が
どういう意味かはパッと見てわかるんじゃないかな?
0278デフォルトの名無しさんNGNG
>>276
マジレスシル!!正しこれが最後。

まずADSLでネット始めた方が安全だよ。それで電気店に行って対策ソフト
購入シル!店員に説明聞くか説明書読めば大概分かる。次ぎにセキュリティを
「高」にする。さらに心配なら「串」を刺すって方法もある。
サイトはトレンドマイクロを参考にした方がいいな。
メールはフリーで行い自分の活動的な事はネットカフェから作業するベシ!
他の奴の言う事は聞かなくてヨロシイ。

この書き込みに「自演」とか「お前は回線切って死ね」とか色々あると
思うけど素人はその程度なんで。
あっ、お前も分からなければ市ね!さっきは 書き込む所間違えてスマソ(W
0279デフォルトの名無しさんNGNG
>>277

> Cを使ってる人間であれば !*str という式が

そうだね。それくらい分かるよね(^_^;)

>>278
Σ( ̄□ ̄;)!!
0280デフォルトの名無しさんNGNG
>>278
明後日の方向にレスなさってますか?
0281デフォルトの名無しさんNGNG
>>278
ワラタ
0282デフォルトの名無しさんNGNG
>>278
> 書き込む所間違えてスマソ
今も間違えてるし。
0283256NGNG
>>278
村上ショージ氏でつか?
このシュールさは彼としか思えない・・・
0284デフォルトの名無しさんNGNG
>>278
ちょっとワロタ。けど
お前は回線切って氏ね!
0285デフォルトの名無しさんNGNG
つーかc言語なんかヤッテルヤシは

パソオタ(デブ・メガネ)ということで

ファイナル・アンサー
0286デフォルトの名無しさんNGNG
ハンカクチュウ ハ ホウチ。
0287256NGNG
>>285
オレは武田真治似で、彼女はhiro似で
大学で仕方なく学んで、楽しいなとか思ってる香具師ですが何か?
0288デフォルトの名無しさんNGNG
>>285
まあ、キミはデブでもなければヲタでもないけど、
プログラムもできない椰子だけどね。
0289デフォルトの名無しさんNGNG
C が主に PC で使われていると思い込んでいるらしい DQN な 285 がいるスレは
ここですか?
0290デフォルトの名無しさんNGNG
c言語は神の為の言語。
選ばれし者しか使えない。
容姿等を問題にする愚者には一笑分からない。
0291デフォルトの名無しさんNGNG
>>285
パソヲタ&デブ&メガネですが何か?
0292256NGNG
PS
0293デフォルトの名無しさんNGNG
>>290
> 愚者には一笑
ワラタ
0294デフォルトの名無しさんNGNG
C言語出来ないキムタク>>>>>>>>>>>>>>>>>>>>>>>プログラム完璧なココの住人

↓死ね
0295デフォルトの名無しさんNGNG
>>286-291
それはさておき。
0296デフォルトの名無しさんNGNG
しかしファイナルアンサーってのも古いな
0297デフォルトの名無しさんNGNG
デブだがパソヲタと呼べるほど知識はない。
0298デフォルトの名無しさんNGNG

日 本 人 同 士 醜 い 争 い を し て い る の は コ コ で す か
0299デフォルトの名無しさんNGNG
            ☆ クールダウン中・・・ ☆
┌──────────────────────―─┐
│                                    |
│                                    |
│                /■\                    |
│               (´∀`∩)                   |
│               (つ  丿                |
│                ( ヽノ                    |
│                し(_)                |
│                                    |
│             Now Onigiring. ...               |
│                                    |
│                                    |
│         しばらくおにぎりでお待ちください。        |
│                                    |
└───────────────────────―┘
     クールダウンの途中でエラーが発生した場合は、
      「無視(I)」 を選択して続行してください。
0300デフォルトの名無しさんNGNG
放置しとけよお前ら。レベル低いぞ。
0301デフォルトの名無しさんNGNG
プログラム完璧なココの住人はキモイです


0302デフォルトの名無しさんNGNG
>>300
299 コピペで使ってね。
0303デフォルトの名無しさんNGNG
            >>285
             ↓                _人
      ∩    ∧_∧            ノ⌒ 丿
       \ヽ_(    )         _/   ::(
         \_   ノ        /     :::::::\
 ∩_   _/    /         (     :::::::;;;;;;;)
 L_ `ー / /   /           \_―― ̄ ̄::::::::::\
     ヽ  | |__/ |           ノ ̄     ::::::::::::::::::::::)
  | ̄ ̄ ̄\     ノ お前は     (     ::::::::::::::;;;;;;;;;;;;ノ
  | | ̄「~| ̄( 、 A , )クソでも   / ̄――――― ̄ ̄::::::::\
  | |  | |  ∨ ̄∨        (        :::::::::::::::::::::::::::::::::)
  し'  し'                \__::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;ノ



                               __
                       >>285  l ̄/.  ___        
                         ↓ / /.  / ___ノ  
                        __/ /_/ /   
      喰っとけウラー!       Y人, ' ',人⌒ヽ、, '
                      Y⌒ヽ)⌒ヽ、 人,ヽ)人'、, '
        へ, --- 、         ノ ̄     ::::::::::::::::::::::)
     / ̄ ̄ ̄  、____\       (     ::::::::::::::;;;;;;;;;;;;ノ
    / _/ ̄「~|\ __ \     / ̄――――― ̄ ̄::::::::\
   | |  | | ( 、 A , \ミソ   (        :::::::::::::::::::::::::::::::::)
   し'   し' と∨ ̄∨       \__::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;ノ
0304デフォルトの名無しさんNGNG
というより・・・・

2chラーが キ モ イ

↓お前、女いねーだろ・・・そして死ね

0305デフォルトの名無しさんNGNG
それはさておき。
0306デフォルトの名無しさんNGNG



はっきりいって一般的にいうパソヲタ(デブメガネアニオタ)にはC言語できないと思われ。
(漏れの周りは死にそうにやせたヤシばっかりだ。。)


 
0307デフォルトの名無しさんNGNG


イッパイ ツレタ プッ

0308デフォルトの名無しさんNGNG
充分楽しんだので放置すっか。
0309デフォルトの名無しさんNGNG
こういうのは950超えてからやれよ
0310デフォルトの名無しさんNGNG
スマ
0311デフォルトの名無しさんNGNG
しかし俺の周りではデブでCができる奴は本当にいない。
人のコードにゴチャゴチャ言ってくる奴は腐るほどいるが。
意外と真理かもしれん。
0312256NGNG
おいお前ら、Cを始めたきっかけ何ですか?
0313デフォルトの名無しさんNGNG
c言語極めてるここの住人ってオレから見れば
プロジェクトxに出てる技術者の爺さん達並みに
かっこいいと思うけど。
0314デフォルトの名無しさんNGNG
会社で使ってるからだ。
0315デフォルトの名無しさんNGNG
きっかけは学校の授業
0316デフォルトの名無しさんNGNG
上司は言った。
「キミ、JavaできるならCもできるよね?」
……それはない。

「キミ、CできるならJavaもできるよね?」
……それもない。
0317デフォルトの名無しさんNGNG
>>313
中学生が英語の勉強をしてるのを見た小学生が「英語できるんだ、すごい!」
と言ってるようなもの。


0318デフォルトの名無しさんNGNG
>>317

間違いなく理解してくれる対象(マシン&コンパイラ、クソなのは除く)があって、
業務ロジックを規格に沿って記述(コーディング)するだけだからねぇ。
キーボード打つのと同じで、慣れでしょ。
0319デフォルトの名無しさんNGNG
まるでそうするのが当然のように C を覚えました。
0320デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
#include <conio.h>

void saikoro(int*,int*);
void hangei(void);

int kakekin, motikin=1000,me1,me2;

void main(void)
{
int tyouhan,yosou;

printf("持ち金%d円です。\n",motikin);
while(1)
{
printf("丁か半か予想して、丁なら0、半なら1を入力してください.やめるときは2を入力してください.\n");
scanf("%d ",&yosou);

if(yosou==2)
{
exit(0);
}
printf("掛け金を決めてください.\n");
scanf("%d",&kakekin);
printf("掛け金は、%dです。",kakekin);

getch();
0321デフォルトの名無しさんNGNG

saikoro(&me1,&me2);
int kekka=(me1+me2) %2;

if(kekka =0)
{
printf("丁です.");
tyouhan=0;
}
else
{
printf("半です.");
tyouhan=1;
}

if(yosou==tyouhan)
{
printf("予想的中です.掛け金分お金が増えます!");
motikin=kakekin+motikin;
}
else
{
printf("はずれです.掛け金没収!");
motikin=motikin-kakekin;
}
0322デフォルトの名無しさんNGNG


break;
}

return;


}

void saikoro(int *c,int *d)
{
srand((unsigned)time(NULL));//rand()だけではいつも同じになる

*c=rand()%6+1;
*d=rand()%6+1;
printf("%dと%dです。",*c,*d);
return;
}


で、掛け金を決めてくださいと言う前に、scanf("%d",&kakekin);が動作してしまうのですが、なぜですか?
0323デフォルトの名無しさんNGNG
>>322
勘違いじゃないのか?
0324もまずにパピコNGNG
>>322
バッファにたまってるのかな。知らんけど。fflush(stdout)するか。
0325デフォルトの名無しさんNGNG
いきなり複数レスに渡ってソースを書くのは荒らしに近い
0326323NGNG
>>324
もしたまっていたとしても、printfは実行されない?
0327326NGNG
バッファってstdoutのバッファか・・・スマソ
0328デフォルトの名無しさんNGNG
>>325
ごめんなさい。でも、長かったんで。こういうときは、前もって複数レスしますっていったほうがいいんですか?
>>326
printf実行されます。
0329デフォルトの名無しさんNGNG
すみません、当方、今までプログラムを組んだことが一度もなく、
これからプログラムを学ぼうかと思っているのですが、
初めて学ぶ言語としてC言語はどうでしょうか?
一応、WindowsマシンとボーランドCの無料版はすでに入手してあります。
0330デフォルトの名無しさんNGNG
>>320
scanf() はもっと丁寧に扱え。

×: scanf("%d ",&yosou);
○: scanf("%d",&yosou);
0331326NGNG
>>330
よくみつけたなー。なるほど。全然わからんかった。

あと、kekkaってブロックの先頭でないところで宣言しているね。
■ このスレッドは過去ログ倉庫に格納されています