C言語なら俺に聞け 153

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fba-LL4R)
垢版 |
2019/08/17(土) 23:02:42.00ID:tN5mSQYg0
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/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/12/23(月) 14:59:43.87ID:rvIcRY54d
今時Cを使うのって
そういうメジャー所じゃなくて
小規模マイコン用の独自コンパイラがメインでは?

そうでもない?
2019/12/23(月) 15:35:31.75ID:Losi+wwQ0
メジャーなところで旗色が悪くなったからって
マイナーなところへ逃げ込む気か
相手すんの馬鹿らしくなるぜ
2019/12/23(月) 15:43:24.53ID:c0dHMUCB0
規格を捏ねくりまわして喜んでいるのは言語マニアだけだしな
実際の現場は殆どが独自コンパイラ
2019/12/23(月) 15:50:57.95ID:Losi+wwQ0
捏ねくりまわすって、工業製品を使って工業製品を産み出すのに
規格票を確認するのは工業人の当たり前の日常だろうがよ
2019/12/23(月) 15:54:46.80ID:c0dHMUCB0
頭でっかちの老害
2019/12/23(月) 16:01:57.23ID:Losi+wwQ0
筋の通らんガキの駄々こねそのものだな
2019/12/23(月) 16:12:34.32ID:c0dHMUCB0
必要なのは規格よりもコンパイラ製造元のマニュアルだ
規格は実際の動作を保証してはくれない
2019/12/23(月) 16:29:00.49ID:Losi+wwQ0
コンパイラのマニュアルも必要だが
規格「よりも」という変なバイアスは無用
「と」だろうが
2019/12/23(月) 18:06:56.36ID:rvIcRY54d
テンプレに入れた方がいいな
特に断りがない限りはC89/C90が前提だって
2019/12/23(月) 18:19:44.32ID:Losi+wwQ0
却下
それこそ老害以外の何ものでもない
2019/12/23(月) 18:23:01.96ID:z7fGiGkq0
100歩譲ってC99
C17やC20限定の話題は他にスレを立ててそっちでやって
2019/12/23(月) 18:23:59.39ID:hXczb3NL0
老害でない人たちは、C99スレでも立ててそこに移動で
2019/12/23(月) 18:37:06.44ID:CGp0hW9r0
bool 型があったとしても、
printf の引数(... で受ける) に渡すタイミングで暗黙に数値化しちゃうんじゃないかな?

C++での引数型により別のものが呼ばれる機構は期待できない部分
2019/12/23(月) 19:24:17.92ID:GiJKkL8M0
>>674
それは名案ですね、正直言って C89=K&R2 で必要かつ十分ですし、C99 になって追加されたことといえば C++ と均整のとれない糞仕様が多くて役に立つものは一つか二つか…
2019/12/23(月) 19:49:25.53ID:GiJKkL8M0
>>663
たしかに規格ISO/IEC9899:1999 のどこにあるか?というと、ちょっとみつからないですね
default argument promotion とはいうみたいですが
これは char, short -> int
float -> double
だったかと
2019/12/23(月) 20:06:06.16ID:GiJKkL8M0
>>675
ジジイ、ジジイか…
それじゃお前はなんだ、この餓鬼が
おれはお前さんがこの世に落っこって来る前からバグつくってんだ
2019/12/23(月) 21:14:46.40ID:X1aPCWn8M
シニア専用C言語スレでも作れば
2019/12/23(月) 21:31:36.89ID:GiJKkL8M0
>>682
ジュニア専用お子ちゃまC言語は他所でおねがいします
2019/12/23(月) 21:33:00.29ID:Losi+wwQ0
gotoの何がいけないか説明できるやつ、ここまでゼロ
2019/12/23(月) 21:52:10.47ID:YCEz+SRJ0
年取ると新しいことが覚えられないのは理解するよ。
だからって30年前の規格で縛るとかどんだけおつむ弱いんだよ
2019/12/23(月) 21:54:45.06ID:8K/Z1PN30
まだgoto文とか言ってるのか
認知症かよw
2019/12/23(月) 23:05:23.85ID:hXczb3NL0
30年経ってもまだ対応完了しないコンパイラがある件
2019/12/23(月) 23:28:22.45ID:YCEz+SRJ0
そらあるだろうさ。だからスレも底辺コンパイラに合わせろとか頭腐ってるんじゃねーの?
2019/12/23(月) 23:42:25.45ID:hXczb3NL0
上級国民用のC言語スレを建てて,そちらに移った方が良いのでは?w
2019/12/24(火) 01:55:10.60ID:DYebt3JD0
>>681
(若さは)重要な要素だ
2019/12/24(火) 05:45:35.87ID:Kb/HLSFP0
>>685
C++ でコンパイルできない C なんて何の役に立つのか疑問だ、といっているのですよ
2019/12/24(火) 05:52:12.01ID:Kb/HLSFP0
>>690
若さ若さとひけらかすな!
2019/12/24(火) 07:01:44.07ID:Uve8u0PJ0
>>691
じゃあC++使えばいい
C++コンパイラでC非互換の機能を使わない縛りこそ
何の役にも立ちゃしねえ
それをやるやつも役立たず
2019/12/24(火) 07:03:32.05ID:Uve8u0PJ0
積集合なんかいいとこ取りの逆だ
2019/12/24(火) 07:04:40.49ID:cUFUrp770
ほんそれ
C++を覚えてさっさとこのスレからいなくなってくれ
ガキんちょは
2019/12/24(火) 08:24:53.44ID:DYV/RLXmM
>>691
公開ヘッダだけ互換で書いとけばいいだろマヌケ
2019/12/24(火) 13:32:50.89ID:nbxHNYps0
C言語環境には色々と障害が多いが
その最たるものの一つが老害の多さだとこのスレを見てもよく分かる
2019/12/24(火) 13:37:43.29ID:Uve8u0PJ0
そもそもC89とC17の違いがそんなに問題になるか?
C89さえ分かっていればC17を差分で憶えるのは大した話じゃない
不勉強なやつが自己弁護のために騒いでるだけだろうが
2019/12/24(火) 14:54:32.55ID:4UlhXCkA0
勉強家はC++に移られたらどうか
貴重な人生を無駄にしないで済む
2019/12/24(火) 16:09:31.88ID:Uve8u0PJ0
もちC++も使ってるよ
C使いが他の言語をやってないという仮定がそもそもおかしいぜ
2019/12/24(火) 16:17:11.27ID:4UlhXCkA0
勉強家はこのスレに入らないから,さっさと移動したらどうか?
粗大ゴミしかいないスレなんだから,こんな所に居続ける必要ないだろ
お前自身が粗大ゴミだと自覚しているなら仕方がないが
2019/12/24(火) 16:30:12.41ID:Uve8u0PJ0
うるせえな
どこのスレに来ようが貴様に口だしされる筋合いはない
2019/12/24(火) 16:44:50.65ID:4UlhXCkA0
荒らしたいって事?
2019/12/24(火) 16:45:57.75ID:Uve8u0PJ0
脈絡ねえこと言ってんなよ
2019/12/24(火) 17:10:39.49ID:4UlhXCkA0
特定の話題で話したいなら,そういうスレを見つけるか、無ければ作れば良いんだよ
C言語全般を話題にする既存のスレを荒らす必要がこれっぽっちもない
2019/12/24(火) 17:25:45.59ID:obM24HmuM
そもそも
> 粗大ゴミしかいないスレなんだから
なんて言ってる>>701が荒しだろ
元々は質問スレだぞ
2019/12/24(火) 17:30:04.53ID:4c603ABM0
>>705
C言語全般を話題にするスレと言ってる奴がC99は別スレに行けとか言ってたのだから、支離滅裂ダナー
2019/12/24(火) 17:52:25.07ID:vOfEkls8d
C言語は
非常にチープな環境でも動く
低レベルな記述が可能
非常に多くの環境で動作する
コンパイラの作成が容易

ということで未だに多くの場所で使われている
これらのメリットを減らす拡張は不要

これらのメリットが不要な環境ではC言語は不要
C++や、よりリッチな言語を使うべき
2019/12/24(火) 18:11:41.28ID:Uve8u0PJ0
もうゴテゴテつけんなよ、という意見には賛成だ
2019/12/24(火) 18:19:52.82ID:Kb/HLSFP0
>>693
>C++コンパイラでC非互換の機能を使わない縛りこそ何の役にも立ちゃしねえ
K&R2 の範囲で書くことができるというのは必須の技能だと思いますよ、それができない、そもそもなにが K&R2 の範囲でなにがそうではないかを知らないようでは馬鹿と謗られてもしかたがない
2019/12/24(火) 18:20:21.71ID:Kb/HLSFP0
>>696
kwsk
2019/12/24(火) 18:26:03.59ID:Kb/HLSFP0
>>698
>C89さえ分かっていればC17を差分で憶えるのは大した話じゃない

そのとおり

できる奴にとっては、C99 だろうが C11 だろうが C17 だろうが、どれも大差がなく自由に行き来できるしどうでもいい
しかし、ここで敢えて「C89=K&R2 こそ正義」と煽ってみると、案外「老害死ね」という反応が続出する
そういう点から推察するところでは、このスレに出入りする人間の 50% は K&R2 すらわかっていないレベルではないだろうか、と考えさせられるのですよ
2019/12/24(火) 18:29:06.28ID:Kb/HLSFP0
>>708
ライブラリとして、他の言語から直に呼んで貰うことを目指すため、C で書き直してしまうという話もよく聞きます、この手の用途を他の言語で聞いたことがない
2019/12/24(火) 18:34:23.41ID:Kb/HLSFP0
>>692
我々がしているのはヌルポインタの話だ
ただ 0 と書けば済む話のものに誰がタイプ数をつぎ込む?
まして #define NULL (void *)0 と構えて運用するようなものじゃない
マクロ NULL が存在すること自体なにかの間違いなのだ
2019/12/24(火) 18:47:31.01ID:Uve8u0PJ0
>>710
K&R2の範囲で書くという具体的な案件を1つでも知っているか?
俺も含め、その案件に携わることになったとして困る者は極めて少数だと思うぜ
50%もいるようには全く思わない

K&R1の案件でさえ、今の若いのでもすぐ慣れるだろうさ
2019/12/24(火) 18:51:57.03ID:Kb/HLSFP0
>>715
そうですか
そのわりには、「老害死ね」という反応がかまびすしいですね
2019/12/24(火) 18:52:26.57ID:4kM/Vj6H0
>>714
整数とポインタのサイズが違うとき、NULLがないと大変なことになる。
2019/12/24(火) 18:55:16.45ID:Kb/HLSFP0
>>717
可変長引数関数に (void *)0 を渡すときだけは (void *)0 は必要ですが、それ以外は 0 と書いてそれがポインタか整数かは文脈で判定できると思っています
2019/12/24(火) 19:09:32.87ID:wOhZrnY70
>>717
ん?可変長引数とか、整数とポインタが曖昧なところでは NULL にもキャスト要るし、
NULL がサイズ違いとか動作上の問題を解決することなんてないのでは?
http://www.kouno.jp/home/c_faq/c5.html#4
2019/12/25(水) 05:49:06.65ID:7G8eDwRY0
> ただ 0 と書けば済む話のものに誰がタイプ数をつぎ込む?
というわけで if(x != 0) じゃなくて if(x) だな
2019/12/25(水) 07:47:40.10ID:z2z2eZOK0
プロジェクトリーダー「数字直接記入禁止!全部#define で置き換えろ!」
大昔そんな事があったと聞いた。
2019/12/25(水) 08:01:19.10ID:LrSoTBV60
あった
フラグを一個も立って無いことを示す0もdefine
デバイスの特性を多項式近似した関数も
各係数を全てdefine
縦と横のそれぞれの座標計算、ループで処理にした方が記述が簡単なので2でループしたら
その2もdefine

他にも意味不明のコーディング規約が多数
2019/12/25(水) 08:32:20.25ID:oGSLd7g6a
それもこれもマジックナンバーにコメント書かなかったおまいらが悪いんやで
2019/12/25(水) 08:34:25.12ID:mNtkopg10
マジックナンバーの何がいけない、どういう場合にどんな問題があるかを理解しないまま、杓子定規にルールだけ覚えるとそんな奴が出来上がるな。
2019/12/25(水) 08:51:06.27ID:gNbuW8hwM
>>721
> プロジェクトリーダー「数字直接記入禁止!全部#define で置き換えろ!」

良いと思うよ!!
2019/12/25(水) 09:53:45.40ID:WMMCG2Dq0
値まで書いたアホっぽい定数 はわりと使うかな・・・

#define EGGCOUNT30 30
みたいに書いちゃうやつ

コード中に即値書きたいけど書くとリファクタリングで死ぬから
リファクタリングのためだけに定数書いてる感じ
727デフォルトの名無しさん (アウウィフ FF5b-hPjh)
垢版 |
2019/12/25(水) 10:17:23.56ID:2ymVLaRcF
当たり前だがリファクタリング以前に定数調整だけで死ぬぞ
#define EGGCOUNT 30
なら
#define EGGCOUNT 40
で済むのに

#define EGGCOUNT30 30
だと
#define EGGCOUNT40 40
で全置換する気か
2019/12/25(水) 10:24:47.96ID:gNbuW8hwM
s/30/40/g
は基地外沙汰だが
s/EGGCOUNT30/EGGCOUNT40/g
ならイケそうかも!!
2019/12/25(水) 13:00:30.03ID:KFffpDzg0
フォーマット文字列中のも駄目なんかな
少数以下 3桁に整えるのに "%.3f" → "%.*f" にして引数で渡す
2019/12/25(水) 13:08:29.51ID:KFffpDzg0
ああ フォーマット文字列を define しろということか
#define FORMAT "%.3f"
 :
sprintf(buf, FROMAT, double_value);
みたいな
2019/12/25(水) 13:12:39.59ID:wMqEADXhd
>>727
数値一通りdefineして
NUM_56
みたいに数値のかわりに使う

糞コーディング規約の典型

そういう環境だと
大抵defineの数値を変えるだけじゃまともに動かない
2019/12/25(水) 13:18:43.41ID:wMqEADXhd
>>730
文字列リテラルをコード中に記述禁止
その為itoaみたいなのを組み合わせたコードが出来る
2019/12/25(水) 13:45:41.90ID:WMMCG2Dq0
>>727
そのとおり、全置換をする前提なんよ

置換するのはIDEのお仕事だから漏れは無いと信頼してるし、なにより
ソース改変による影響範囲の割り出しとテストしなおしの強制を兼ねてる
2019/12/25(水) 13:50:36.68ID:V0IDAf7x0
エディタの正規表現は使わないのか?
複数パターンでも一回で出来ると思うが
2019/12/25(水) 14:28:39.98ID:ZI663GBY0
>>720
MISRA-C の違反!

if(条件式) には、実質的なbool 値のみを書く!

ただし、if( x ) で、x がbool変数なら、OK
2019/12/25(水) 14:58:33.15ID:HhfzRslS0
x != 0 も bool ではないんだが
2019/12/25(水) 15:17:44.07ID:ZI663GBY0
x != 0
は、yes/no の2値しかないでしょ?

実質的には、bool 値として使っている
2019/12/25(水) 15:25:44.58ID:HhfzRslS0
それはおまえの思い込み

ISO/IEC 9899:2011
6.5.9 Equality operators
3
Each of the operators yields 1 if the specified relation is true and 0 if it is false.
The result has type int.

これが事実だ
739デフォルトの名無しさん (ワッチョイ bf8c-vyMa)
垢版 |
2019/12/25(水) 16:13:24.55ID:xjd+p9Q20
直接コードを書くことを禁止する。スクリプトを使って書け。
2019/12/25(水) 16:42:27.57ID:wMqEADXhd
BOOL
YESNO
OKCANCEL
ONEBIT

実質的にboolなら中身はdoubleでもenumでもint64_tでもifに入れて良い
っていうコーディング規約
2019/12/25(水) 16:42:38.50ID:ZI663GBY0
文法は関係ない。
あくまでも、コードの品質・可読性を上げるための、MISRA-C のルール!

if, while などの条件式には、実質的なbool 値しか書けない

条件式に、単なる整数などを書けない。
整数の0 を偽とみなした、条件判断を書けない

MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
2019/12/25(水) 17:03:05.94ID:TfD43SqCa
>>741
よそのスレでRuby基地外っぷりを発揮してさんざん迷惑を掛けているお前がルール遵守を説くなんて、羞恥心はないのか?
2019/12/25(水) 17:09:20.32ID:KFffpDzg0
if (x) → if (!!x) かにゃ?
744デフォルトの名無しさん (アウウィフ FF5b-hPjh)
垢版 |
2019/12/25(水) 18:22:33.85ID:2ymVLaRcF
>>735
if(!!x)
2019/12/25(水) 19:13:54.17ID:LrSoTBV60
まともなルールと仮定した場合

>>735 がダメなら
>>743 >>744 もダメだろうな
2019/12/25(水) 19:56:23.47ID:Fvp/Fpps0
>>741
また MISRA ですか…
MISRA 適合かどうかを診断してくれるプログラムでも配布してくれているんだと思っていましたが、そうではなく、ただ人を縛る規則を決めるのが好きな人間の集団なんですね…
2019/12/25(水) 21:01:12.18ID:HhfzRslS0
> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw

MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
もう罵倒語が喉まで出かかっているんだが
2019/12/25(水) 22:01:38.68ID:R5R0tFog0
違うナァ
MISRA語ルールを守っているとMISRA語のコンパイラが書けないんだよw
大いなる自己矛盾に陥ってMISRAは沈没する
2019/12/25(水) 22:15:36.92ID:rtgRmFxx0
>>726みたいなのはいくつか特定の値しかとれない引数のために使われることはあるね。
まぁenumでもいいんだけど。
2019/12/25(水) 22:31:21.33ID:W4j7C6dU0
>>747
>> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
これを読んで
> MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
と解釈する奴はもれなくバカ
2019/12/25(水) 22:35:19.52ID:HhfzRslS0
>>750
違うんなら弁明しろよ
それができないだろうという予想で、罵倒語が喉まで出かかっている
2019/12/25(水) 22:55:02.25ID:W4j7C6dU0
>>751
マジでバカなのか?w
AならBである
から
AでないならBでない
(当たり前だが真ではない)
って書けばお前のアホさが理解できるかな?
これでわからないなら中学の数学からやり直せ
2019/12/25(水) 23:19:28.12ID:7G8eDwRY0
0(ゼロ)はマジックナンバーじゃないような気が
2019/12/25(水) 23:20:28.23ID:LrSoTBV60
8進数は使用禁止なので0は使えません
2019/12/26(木) 00:09:17.82ID:AoPKrYsL0
0x0と書けばいい
2019/12/26(木) 01:10:46.52ID:SdIj1xpo0
main関数の{ }についてお聞きしたいんですが、
int main(void) {
____/* コード */
}
という表記ではいけないですか?
スッキリCや各種サイトを見ると、
int main(void)
{
____/* コード */
}
となっていることがほとんどなのですが
2019/12/26(木) 01:13:45.64ID:1Soz4RTf0
間を取って
int main(void) { /* コード */ }
でも動くぞ
2019/12/26(木) 01:16:16.88ID:wuBFmrIL0
>>756
コンパイラは改行を無視するんやで
2019/12/26(木) 01:20:09.70ID:SdIj1xpo0
ありがとうございます。
後者にしないといけないという決まりとかあるんですか?
2019/12/26(木) 01:22:32.15ID:B3/URd3+M
文法じゃなくてコーディングスタイルのこと聞いてるんでしょ。
チーム内で決まったスタイルがあるならそれに従えばいいし、
そうでなければ自分の好みで決めればいい。
俺の好みは1行減るし統一感のある前者。
2019/12/26(木) 01:23:11.55ID:rIhsLdYp0
私も前者
2019/12/26(木) 01:28:27.58ID:ekrCE4yL0
K&R2は後者
2019/12/26(木) 01:40:40.30ID:SdIj1xpo0
もう少し考えてみようと思います
深夜にありがとうございました
2019/12/26(木) 07:31:20.36ID:RfJEL4eB0
>>752
では、741は何を主張したかったんだ?

> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw

わざわざ、こんな戯れ言をぬかした意図を説明しろ
2019/12/26(木) 07:33:50.37ID:Fsuom43iM
>>764
それは741に聞けや
俺はお前のバカさを指摘しただけ
2019/12/26(木) 07:36:01.30ID:RfJEL4eB0
>>756
if (...) {
while (...) {
do {
なのに、
main()
{
という矛盾はよく見かけるが
そうなっている案件で秩序を乱すことはしない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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