X



C言語なら俺に聞け 149

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ af9f-7TBo)
垢版 |
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT0
!extend:checked:vvvvv:1000:512

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0900デフォルトの名無しさん (ワッチョイ 4900-MosH)
垢版 |
2019/01/30(水) 21:25:54.58ID:yhwdEVRM0
あ,なんかしょーもないレスの仕様だけ書き込むのもアレだから
ちょっとしたことだけど……
C99の仕様だとfor文の条件の中で新しい変数が宣言できるけど
(新規のプロジェクトでは)積極的に使っていいと思う?
for (int8_t __cnt_foo; __cnt_foo < 42; __cnt_foo++) {
...
}
↑こういうの。
0902デフォルトの名無しさん (ワッチョイ 06ad-5jav)
垢版 |
2019/01/30(水) 21:35:32.25ID:lQux7EEV0
LINEの入社試験でC選んだけど
forの中などで宣言できる仕様になってた
cppやjavaでも使えるし使っていってええんじゃ

それにi,j,kってどうでもええ変数やから頭でも書く必要もないような
0903デフォルトの名無しさん (ワッチョイ 3152-FxQn)
垢版 |
2019/01/30(水) 21:43:46.06ID:5GzTmkIQ0
反復文のブロック外で使わない変数を、反復文の外で宣言しなければならない今までの仕様がむしろおかしい。
あと中で宣言すれば変数名ijklmn,,,なんて自体も避けれる。多重ループでなければ。
0904デフォルトの名無しさん (ワッチョイ 417b-/DDN)
垢版 |
2019/01/30(水) 21:53:53.32ID:fRt/VtGE0
for での変数宣言は // の単一行コメントと同じ程度には使うかな。

むしろ変数名が __cnt_foo なのが気になる。2つの下線で始まってる部分。

__cnt_foo を宣言だけして、初期化してないのも怖いなぁ。
でも、今お手元のgccで試したところ、エラーも警告も出ないんだね。


あと、これは投稿番号904になるつもりだが、実際どうかな?
0905デフォルトの名無しさん (ワッチョイ 4900-MosH)
垢版 |
2019/01/30(水) 22:37:01.37ID:yhwdEVRM0
>>904
ブラウザで見てるが,レス番号は904だ。
あと初期化は単に書き忘れただけw

「2つの下線で始まる函数や変数は局所使用」
って結構いろんなプロジェクトで(OSSでもたまに)
みかけるんだけど,変かしら。
0908デフォルトの名無しさん (ワッチョイ ff33-vS77)
垢版 |
2019/01/31(木) 04:33:42.98ID:9oWu7LhB0
>>905
うん、変だ
下線2つで始めるのは衝突を最高レベルに警戒する場合の不自然なスタイルで
たいていはスコープが効かないマクロやビルトインで何かするときだ

何の変哲もない局所変数でそんなことするのはひねくれ者だ
0921デフォルトの名無しさん (ワッチョイ ff02-lvwX)
垢版 |
2019/02/03(日) 17:56:15.17ID:DVXBklBr0
>>919
昔そんな言語なかったっけ?言語と言うよりはそういう特殊仕様が実装された実行環境かな。なんとなくBASICとかであったような気がするんだが。
(もしかすると40年ぐらい前のマイコン用に作られた言語かも知れない。こういうのはバイト数減らすのに都合が良いから)
0930デフォルトの名無しさん (ワッチョイ ff02-lvwX)
垢版 |
2019/02/03(日) 19:22:06.40ID:DVXBklBr0
>>925>>927
あ、そうか。そういやそうだったね。すっかり忘れてた。
0936デフォルトの名無しさん (アメ MM03-5/sk)
垢版 |
2019/02/03(日) 20:59:31.07ID:DdA3Wm74M
>>935
>>929は変数使わない言語って言ってるんで。
forthに変数が無いとは言ってないよ。
でもちょっとしたことなら全部スタックで済ましちゃうでしょ?そういう言語だし。
0943919 (ワッチョイ df7b-Z3mi)
垢版 |
2019/02/04(月) 08:07:42.85ID:01AVniBC0
>>920 (== 942) こういうネタを投稿するときは
どのくらいボカすか、ってさじ加減が難しいんだよ。

あからさま過ぎれば、知識の豊富な人には物足りないし、
おとなし過ぎると、何の話かサッパリ分からんって人が多くなる。
今回は間口を広げる方針、分かりやすさ優先だったと解釈してくれ。
0955デフォルトの名無しさん (ワッチョイ 5f45-Wpr0)
垢版 |
2019/02/04(月) 17:53:18.29ID:958Z8DnZ0
大域変数は、仕様上、0で初期化される事が保証されてる。
mainが実質的にintを返しているのと同じ状態、void指定からexit()によって値を返す形式も許容範囲内。
exit()は閉じてないストリームを閉じる処理も含んでいる。

mainの引数指定していないのは、GCCでも警告すら出ないで通った。
void指定したのと同一のコード吐き出すけど、これ本当に何かまずいの?
0959 ◆QZaw55cn4c (ワッチョイ 7f47-UFcY)
垢版 |
2019/02/04(月) 19:00:36.55ID:CLpqTC7n0
個人的には
int main()
は許容範囲です、でも
void main(int argc, char **argv)
は許容できません

理由は、main() が接続(リンク)するスタートアップは、main() の内容がどんなものであれ変わらないから
スタートアップ(呼び出し側)が固定であるのならば、呼び出され側のシグネチャーも固定であるべきと考えます
スタートアップが仮定する引数と返り値を、main() が変えていい、とか考えられない暴挙だと思うのです

私がコンパイラを書くことが万が一あったとしたら、void main() はコンパイルエラーにします…
0961デフォルトの名無しさん (アウアウウー Saa3-d53M)
垢版 |
2019/02/04(月) 20:04:17.97ID:zvEiFsrUa
>>945
まずくないけど変な感じはする。
それと本当なら出力の最後に改行が必要なのではないか?
fclose()がないが、exit()するならその中でやられている筈。しかし自分でやった方が良いとは思う。
0963 ◆QZaw55cn4c (ワッチョイ 7f47-UFcY)
垢版 |
2019/02/04(月) 20:28:02.23ID:CLpqTC7n0
>>960
引数の指定なし、は今でもありえるでしょうね、廃止予定とはきいていません
void main() は、ISO/IEC 9899/1999 5.1.2.2.1 にて陽に記述はありません
(ただし、or in some other implementation-defined manner. という注記はありますけれども)
0964デフォルトの名無しさん (ワッチョイ 7fab-qf6r)
垢版 |
2019/02/04(月) 20:29:04.76ID:jUExJMkq0
AVRやPICといったマイコンでの話。

符号付整数型を文字列に変換しようと思ってるんだけど
定番のsprintfはこれら8bitマイコンにはややメモリを食いすぎて実装するのは厳しい。

代わりにメモリの消費量が少ないitoaという関数を使おうかと思ってるんだけど
itoaよりさらにメモリを節約できる方法ってあったりする?
0968デフォルトの名無しさん (ワッチョイ df7b-Z3mi)
垢版 |
2019/02/04(月) 20:58:12.71ID:01AVniBC0
>>945 は「行儀が(とても)悪いけど、明確な規格違反も含んでいない」っていう
引っ掛け問題なんじゃないか?
いくつか気になる点があって調べたけど、どれも規格違反とまでは言えなかった。

>>964
実際に不都合が発生するまではライブラリの関数を使うべし、
ってのがプログラミングの定石だけど、それは置いといて。
itoa() は標準関数じゃないみたいだから、独自ライブラリなら
関数のソースも付属してるんじゃないかな。
自分が使う数値の範囲が限定されるなら、付属ソースを参考に
専用の「数値→文字列」の変換関数を作るのも簡単かと。
(コードの著作権とかの方面は考慮してないので御注意)
0973デフォルトの名無しさん (アウアウウー Saa3-d53M)
垢版 |
2019/02/05(火) 09:26:29.85ID:NCwCR2JIa
>>964
桁数固定で良いなら自分で下の桁から10で割った余りに'0'足して10で割るってのを桁数分だけ繰り返せば良いのでは?
0974デフォルトの名無しさん (アウアウウー Saa3-d53M)
垢版 |
2019/02/05(火) 09:27:26.26ID:NCwCR2JIa
うう。リロードしたら答えが全て書いてあるではないか。orz
0975デフォルトの名無しさん (ワッチョイ df27-vS77)
垢版 |
2019/02/05(火) 19:48:53.03ID:ksVxO8O00
https://mevius.5ch.net/test/read.cgi/gamedev/1028273462/

1 名前:名前は開発中のものです。[] 投稿日:02/08/02(金) 16:31 ID:GWrer4oY
C言語でゲームって作れるわけ?
あんなの文章表示させられるだけでしょ?


255 名前:名前は開発中のものです。[] 投稿日:2017/02/05(日) 09:12:26.60 ID:AoXQwlvR [1/2]
くっそ懐かしいスレまだあったのか建てたの高校生だった頃の俺やぞwww
ちな今銀行のATMのシステム開発技術者。なんてアホなスレ建ててたんだ俺は・・・



ちょっとジーンとしたw
0977デフォルトの名無しさん (ワッチョイ df01-zGAl)
垢版 |
2019/02/05(火) 21:10:30.19ID:or2LkC5v0
https://paiza.io/projects/ocopHn6TvkpJu4a--2xAig

初心者なんだが質問したい
もしスレチだったら無視してくれ

coding ground でやってたのだがコンパイルは通ったんだけど正常に実行されない。自分ではよくわからなかったので誰が暇な人いたら教えてほしい…
必要な情報あれば送る。
0981デフォルトの名無しさん (ワッチョイ df01-zGAl)
垢版 |
2019/02/06(水) 02:22:12.53ID:yGh9lkMb0
https://paiza.io/projects/F0I33_Di-fagw1kL49BVoQ

サンクス
strcmpを使ってみたのだがまだダメなようだ
正常にbreakできない
使い方が間違っているのかもしれない
0983デフォルトの名無しさん (ワッチョイ ff02-vS77)
垢版 |
2019/02/06(水) 03:09:41.56ID:jnwpwdAT0
>>981
そのプログラム問題ないぞ。単に入力に 0 が入ってない(というか何もない)からうまく行かないだけ。
下の所の「入力」タブを押して標準入力から読ませる文字列を入れておいてから実行すればいい。
例えばこんな風にだ。(これは入力の所に文字列セットしただけ。プログラム変更なし)。
https://paiza.io/projects/sZbQ6S7tfTLKqC_CEpG_8w
0985デフォルトの名無しさん (ワッチョイ df00-/DTb)
垢版 |
2019/02/06(水) 04:30:43.46ID:FgEjt1k50
Cが高速な理由ってコンパイラが出力バイナリの速度に重点を置いていて
かつそのコンパイラが長年の歴史をかけて磨かれてきたから。っていうのは間違ってるかな

Cの言語構造そのものに高速性が見出せない。
直にx86アセンブラを書いても速度が遅かったりするもん。
0986デフォルトの名無しさん (ワッチョイ df01-vS77)
垢版 |
2019/02/06(水) 04:57:27.49ID:eUM592Vs0
ループから抜けるときに goto使ったらダメなんですか?

for (...) {
for (...) {
if (...) goto LOOP_EXIT;
}
}
LOOP_EXIT:

こういう感じで書いたら先輩に怒られました。
フラグ見てループ抜けるように修正しろと。
指示されたので従いますけど、どうしてダメなのかよく分かりません。

どなたか納得するような理由をご存知でしょうか?
0987デフォルトの名無しさん (ワッチョイ df01-WZLq)
垢版 |
2019/02/06(水) 06:01:54.08ID:erbfwmnV0
goto全否定は宗教みたいなもん。
万人が納得できるような理由はないと思う。
BASIC時代のスパゲッティーなプログラムの反省から制御の構造化を崩すようなgotoとcontinueは禁忌されることが多い。
ホントはここぞって言う時には使うべきなんだけどね。
0992デフォルトの名無しさん (ワッチョイ ff2c-U2fY)
垢版 |
2019/02/06(水) 08:47:44.10ID:ko7vbQjm0
Ruby にも、多重ループを一気に抜ける構文がある

catch(:hoge_break) do
3.times do |i|
4.times do |j|
throw(:hoge_break) if hoge
end
end
end

これを認めない人は毎回、継続フラグを判断し続けなければならない。
漏れはむしろ、こちらの書き方の方が、バグる気がする
0997デフォルトの名無しさん (アウアウウー Saa3-d53M)
垢版 |
2019/02/06(水) 12:30:56.55ID:Zn5BTEOaa
>>985
C以外はCと同じようなことをしようとしてもコードが沢山作られて結果的に遅くなるって事だと思うが。(ただし人力で最適化してあるアセンブラ等は除く)。
昔は本当にそうだったように思う。高級言語なのにコンパクトなコード作るのはCぐらいじゃないか?今は知らないけどね。
それと今はインタプリタやVMで実行するのが一般的なJavaのような言語でも実行時に内部でコンパイルしたりJITつかったり工夫がされてるので速度は速くなる事はあるかも。
コードは内部的に大きくなってメモリ食ってるかも知れないけどね。小規模な組み込み用とかでなければ問題にならないと思う。
0999デフォルトの名無しさん (アウアウウー Saa3-d53M)
垢版 |
2019/02/06(水) 12:44:25.18ID:Zn5BTEOaa
>>986
いや、いいよ別に。後でそれで混乱することにならないとか、あるいは使った方がより見やすく分かりやすくなるなら使えばいいのでは?
C言語はtry catch みたいなのもないし、トリッキーな方法でないものをあるかのように見せかけるプログラム作るよりはサクッと goto 使っちゃった方が良いと思う。

その先輩はそのような信仰を持っているか、または会社ならばそこでのコーディング規約で使わない事にしてあるんだろう。
1000デフォルトの名無しさん (ワッチョイ 7fd2-Z7Am)
垢版 |
2019/02/06(水) 12:46:40.08ID:zkk6azTG0
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況