C言語なら俺に聞け 147
■ このスレッドは過去ログ倉庫に格納されています
構造体みたいに
値渡しやコピーもあると(たまには)便利 >>50
void func(int ary[100]); これと
void func(int *ary); これが
意味が違うと思っているのか? 設計意図を示すコメント的な意味ならあると思う
中身は同じだけど 初心者に対して誤解を与えるだけじゃね?
必ずそのサイズで呼ばれると保証されるわけでもないし。 >>52
意味は違うね
要素が100個以外の時に前者を使ってるコードを見たら気持ち悪いだろ?
そういうこと
コンパイラによってはary[1000]にアクセスすれば警告が出る ほんとに警告出るのか?
サイズ指定に意味がないというのが規格だし、コメント程度の役割しか持たせたらあかんという気が お高い静的解析ツールだと警告出るかもね。
やってないから知らんけど。
そういう環境で開発できるならコメント以上の意味はあるかも。
仮定で申し訳ない。 >>55
おまえの主観は聞いてない
プログラムの実行結果が違ってくる例を示せ >>48
多次元配列なら
void func(int ary{}[100])
{
}
とか
void func(int (*ary){}[100])
{
} >>61
間違えた
void func(int ary[][100])
{
}
とか
void func(int (*ary)[100])
{
} >>60
もう一度言う、おまえの主観は聞いてない
正論か屁理屈かはおまえの主観だ
客観的事実を示せ、理屈はそれからだ >>63
だれも機械の解釈の違いには言及してない定期 >>62
void func(int ary[][100]); これはできるのに
int func(void)[][100] これはできない
{
int ary[][100]; これもできない
ary = 0;
return ary;
}
extern int ary[][100]; と
extern int (*ary)[100]; は意味が違う
結局、[]で書くべきなんて主張は
通用しないところが多すぎる戯れ言だ >>64
プログラム言語は機械に解釈させるためのものだ
自明なことを誰も言ってないなんてことこそ屁理屈そのものだろうが >>68
機械の解釈が同じでも人間には違う意味に見えるのはあるよな? >>69
void func(int ary[100]); これのどこが
void func(int *ary); これの構文糖衣なんだ?
書いた奴の頭を疑わせる以外にどんな意味があるんだよ サイズが100でなければならない関数なら
void func(int (*ary)[100]); こう書いて
int ary[100];
func(&ary); こう渡せよボンクラ >>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。 >>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。 >>73
ここがム板ってことを忘れたか?
技術的な話で来い 多次元配列の型は typedef で型名作っておけば楽なのでは? >>68
>>76
この書き込みのどこが技術的な話なんだw
単にイキってるだけじゃん。 >>78
構文糖衣の話をしたんだが
構文糖衣と書いてないと読めないオツムなのか?
アホw バカwww >>75
そりゃわかりにくいからだよ。
引数にするとCの多次元配列の嘘くささがよく表れるわ。
せめて構造体で包むとかして名前を付けた方がいいね。 >>70
それを糖衣構文というかどうかどうでもいいけど
だれも機械の解釈の違いには言及してない定期
>>50➡>>52
明示とは機械に対してではなく人間に対してのことを言ってるからこの返信は意味がずれてる 超初心者です。
シミュレーターで動かしながら独学で学んでいるのですが、
scanfが動かない(スルーされる)ので困っています。scanfが動くシミュレーターってあります? for文でこんなのを発見したのです。
for(;;)
ご覧のとおりセミコロンがカッコ内に2つあるだけ。
これはどういうfor文でしょうか。
ググり方も分からないです。 昔からその書き方の無限ループを好む人は多い
俺が知ってる範囲だとカーニハンもその書き方を好んでいた 無限ループって言っても
大概は何かの条件で脱出するわけだから
while (条件) が一番わかりやすいと思う
あ、好みだろうから、反論は不要です >>92
俺も無限ループはwhile(TRUE)派だな。
静的解析で怒られるから使うなって人もいるけど。
これも個人の好みなので反論不要です。 無限ループには
for(;;)
while(1)
while(true)
などがあるようですが、驚いたことにfor(;;)がC言語の伝統的スタイルなんだそうで。 for(;;)は無条件であることを的確に表現してる
条件が書いてないのはこれだけ そういややったことないけど while () はできないのかな?
できたらできたでなんか怖いがw >>100
冷静に考えると、何でfor(;;)の真ん中の条件式のとこ空欄でも正しい構文になるんだろうね。
for以外に条件式省略できる構文ってないよね? 左右の式が省略できるから、ついでに真ん中の式も省略可能にしたんだろう。 ループの話でふと思い出したんだけど、この書き方キモいと思う?
LOCK();
while (条件) {
UNLOCK();
LOCK();
}
UNLOCK(); きもいけどきもいだけだから必要ならそうする
Cだしね condwaitみたいなの、たまに書くと混乱するわ LOCKして、何かして、UNLOCKして解放する
わけではないんだ? >>108
while (条件) で統一したいと思いつつ、この手の場合LOCK, UNLOCKのインデントがズレててキモいなといつも気になってしまう
まあどーでも良すぎていつも放置するが
>>110
アトミックな条件チェックの話 >>112
手動でインライン展開する必要がなければ、普通は、
while (check_func()) {
}
bool check_func(){
LOCK();
bool retval = XXX; // check something here
UNLOCK();
return retval;
}
とする。
C++なら inline を付ければインライン展開時(元のコード)と似たようなオブジェクトコードが出ることになっている。 >>107
do {
LOCK();
UNLOCK();
} while (条件); >>107
条件を判断するためだけにLOCK/UNLOCKを行うコードだとしたら最悪のコードだ
do {
LOCK
判断
UNLOCK
if (!判断結果)break;
} while (1);
素直にこうしなさい どこが素直なんだ
締め切りが迫ってバグが取れず
なりふり構ってらんなくなったやつが書く
イカレたコードでしかない ん?
一番素直だろうが
条件判断の為だけにLOCKしてるという前提で
判断を関数に分ける?
分けるかどうかはこんなちっぽけな理由で判断するべきじゃないよ
判断の度に関数にしてたら意味不明な関数で溢れるぞ
もちろん意味が明瞭で他にも同じ判断を使う可能性があるのであれば
関数やマクロでパッキングすべきだが LOCK
判断
UNLOCK
というアトミックなシーケンスを関数にする理由はちっぽけじゃない
LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない どういう場面かなんて>>107では判断不能だし
分けるべきか分けないべきかも>>107では判断不能
判断出来ないのに
「わざわざ関数構成を変えるべき」
なんて主張をすべきじゃない >>123
いやー、わからんのはあなたに実務もしくは勉強の経験がないからよ 昨日のvoid func(int ary[100]);にしても
ary[1000]を警告する処理系の具体的な例が挙がってないしな >>124
わからんねえ
エスパーじゃないんだから
経験が少なくて
分けないべき場面が思い浮かばないんだろうねえ >>127
そういうあなたは昨日のイキってた方の人? パッと見て何をしているか分からないソースって
後の人が取っても苦労するし、気の毒 多分書いた人の意図は
while文内の判定時に
LOCKしたいのかとは思うが check_func()というアドホックっぽい関数名が誤解のもとかな
get条件atomically()にすれば意図が明白 atomicallyって文言いるかねえ
いちいち全部につけて回るより
LOCK/UNLOCKしてることは
忘れたフリができるほうがいいと思うが 英語圏の人には for (;;) をまとめて熟語的に "forever" と読めて
座りがいいのかも知れん。
カーニハンとパイクの『プログラミング作法』に
それに近いようなことが書いてあった。 >>133
条件取得の関数がすでにあってそれがアトミックでないケースも想定 >>134
なるほどforeverか
そういう風にも読めるな >>134
そう言われると確かに座りが良いかもしれんが、(;;)をeverと読むのか。。。
今の時代では顔文字の失敗作にしか見えんなw >>134
#define ever (;;)
とかやんの?
だったら
#define forever for (;;)
のほうがマシだと思う
>>135
空想論なら付き合ってらんねえぜ 「その部分のループ、終了条件が色々なんでとりあえず for (;;) で回して」
みたいな口答でのやりとりで for (;;) を forever と読めば手っ取り早いでしょ。
while (1) で…よりも言いやすいんじゃないかと。
これは空想論だけどね。 無限ループで済むことを
forの第2式を空欄で
なんて回りくどい言い方しねえよ >>140
別に回りくどくないし
良く見るコードだよ
いろんな人のコードを見たりしないの?
みんないろんなポリシーでいろんなコードを書くから
いろんな書き方を知っていた方が良いよ while (条件)
でしかループが組めないのはちょっとさみしい
無理やりこの形にするために
>>107みたいな意味不明なコードになる >>141
口頭でのやり取りつってんだろ
流れを読めよ 口頭で
forの第2式を空欄で
なんて発想は出て来なかった > while (条件)でしかループが組めないのはちょっとさみしい
ここは同意
while(1) であろうが for(;;) であろうが同じこと
どっちかが好みで他方で書かれたからって可読性が落ちたとか騒ぐ
救いようのないドアホには付き合ってらんね
それだけだ whileで無限ループする場合、0じゃなければ1以外を
使ってもいいわけだがどうする?
電話番号とか使えばオシャレかもしれないよ とりあえず、おかしなのに絡まれた >>134 に同情を禁じ得ない。 ■ このスレッドは過去ログ倉庫に格納されています