X

C言語なら俺に聞け 150

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウクー MM57-IE4z)
垢版 |
2019/02/06(水) 13:39:03.21ID:c4bnQMl3M

次スレを作る時は上記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言語なら俺に聞け 149
https://mevius.5ch.net/test/read.cgi/tech/1540731704/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
549デフォルトの名無しさん (アウアウウー Sa9b-RuLt)
垢版 |
2019/03/05(火) 20:50:49.79ID:TQUHbSsoa
>>548
昼夜を問わず沢山のマウントありがとうございます。
2019/03/05(火) 21:09:43.62ID:LEdL4Q1r0
ゆうたんなw
2019/03/05(火) 22:33:03.94ID:QKmISP/B0
>>536
すげー昔の話だがメモリー側で論理演算できるようにして1アクセスでビット単位操作を可能にした特許があったな
元々はグラフィック用で図形の重なりの演算をメモリー側でやるようにしたものだったけど
特開昭61-264453
2019/03/05(火) 22:51:02.28ID:U66Q7+Ir0
>>551
前世紀の話だが液晶モニタ側にメモリ機能を有して
PCの電源落としても液晶モニタ側に必要な情報が画像として記録されてるから
再起動後すぐにデータを使えるようになる、なんてニュースが真面目に流れてたっけ
2019/03/05(火) 23:10:02.68ID:tIL7S9l7a
たとえばFPGAだとビット操作向けのコンピュータ作れたりするんですか?
2019/03/06(水) 06:42:53.51ID:CUnnY/wEx
>>553
外付けのSRAMやSDRAMではI/Fが決まってるので困難だけど、FPGA内で閉じて作るなら可能なんじゃないかしら。
2019/03/06(水) 08:02:21.67ID:y/rbGqHP0
大昔のDRAMには必要なビットだけ書き換えできるライト・パー・ビットって機能を実装したものもあったな
2019/03/06(水) 08:08:34.10ID:CUnnY/wEx
そういえばGRAM用にそういうRAMが何種類かあったね。
OpenGLとかで全画面書き換えが当たり前の今では役に立ちそうにないけど。
C言語とは関係ない話題ですまんかった。
2019/03/06(水) 08:31:46.74ID:LMHeKY6C0
MB-S1はそういう回路を搭載してグラフィックの処理がやたら速かった。
2019/03/06(水) 12:18:27.87ID:Aj1thrX90
X68000のVRAMは変わった仕様だったみたいだね。
2019/03/06(水) 17:11:17.09ID:5bfpZyLy0
Cはコンパイラにより
型の変数の容量どころかポインターすら変わる
きれいに書くことなどできん!

Cの恐ろしいことは、標準っぽい関数が
リソース開放の事を考えてなかったりする所w
2019/03/06(水) 17:40:35.05ID:BXQzb/g70
表面的だな
どっかで吹き込まれたことの受け売りはすぐにバレる
2019/03/06(水) 18:06:49.31ID:t4z0A86na
>>559
あちこちで暴れてるrubyボットか?
562デフォルトの名無しさん (ワッチョイ b75f-tQZn)
垢版 |
2019/03/06(水) 18:17:51.07ID:t0mzyE2R0
>>559
標準っぽい関数とはなんですか?
2019/03/06(水) 18:30:39.79ID:pvc8mHD30
>>559
>Cの恐ろしいことは、標準っぽい関数がリソース開放の事を考えてなかったりする所w

それはどの標準関数ですか?具体的に指摘できますか?
2019/03/06(水) 18:35:15.08ID:YYpMHTIdM
>>563
標準関数ではなく、
標準っぽい関数なんだから
相手にするだけ無駄かと。
2019/03/06(水) 18:36:02.84ID:BXQzb/g70
その昔、printfはメモリリークするとかぬかしてたアホがいた
2019/03/06(水) 18:41:35.18ID:OdnfdSEH0
小学生のプログラミングの授業が始まったせいで5chにも大量に小学生が湧いてるな
学校でプログラミングを教えるのは勘弁してほしいは
2019/03/06(水) 18:44:20.55ID:DQfudujD0
小学校は5ちゃんねる使って授業やってるのかw
2019/03/06(水) 18:45:49.69ID:pvc8mHD30
>>564
いえいえ、標準っぽい、というのだから、標準関数に近いという主観的判断があるのでしょう
それはそれで私は純粋に好奇心が湧いたのです
2019/03/06(水) 18:53:01.46ID:DQfudujD0
「ぼくのかんがえたさいきょうの」
が一番近い
2019/03/06(水) 21:25:19.62ID:nJiuC9TpM
ぼくのかんがえたさいきょうの標準っぽい関数
atod
stringをdouble型に変換する。
標準っぽいが標準でない。
リソース開放を試みるものの、constに阻まれる。
2019/03/06(水) 21:35:13.47ID:BXQzb/g70
Cスレでstringかよw
2019/03/06(水) 22:53:39.41ID:s+f1BYLZ0
標準的な関数で痛い目にあったといえばlocaltime()
コイツがスレッドセーフじゃないせいでひどい目にあったよ……
まあ返り値がポインタな時点で疑うべきだったが。
2019/03/07(木) 00:23:38.58ID:IzAEAgL00
>>570
atod() にてリソース解放の必要はあるのでしょうか?
2019/03/07(木) 03:09:54.57ID:icwsNkaN0
stringは無視するとして、const char*をdoubleに変換する標準ライブラリ関数はatofまたはstrtod
2019/03/07(木) 18:27:15.02ID:LVW4xgZwa
超*2 初心者です。
#include<studio.h>
int main(void){
int a,b;
b=3*a+4;
a=2*b+3;
printf("a=%d\n",a);
printf("b=%d",b);
return 0;
}
とプログラムして、
a=-2
b=-2
という出力を期待したんですが、
a=3
b=0
と出力されてしまいました。
何が間違っているのでしょうか??
長文スマソ
2019/03/07(木) 18:28:41.26ID:LVW4xgZwa
すみません
a=2*b+2
です
2019/03/07(木) 18:35:13.92ID:byd0ZGo00
a、bにまず初期値を入れないと
2019/03/07(木) 18:40:02.18ID:s2VxUnjk0
int a,b;
b=3*a+4;

b = 3 * <未初期化の a は不定の値> + 4;
= <不定の値>

なにになるかはわっからんちん
2019/03/07(木) 18:40:34.01ID:fFrTWbSf0
>>575-576
まずプログラムとして完全に間違っているのは、
b=3*a+4; の評価時点で a は初期化されていない。
初期化されていない自動変数の中身は未規定で、
何が入っているかわからない。

そして第二の間違いとして、
C は二次方程式を解いたりしない。
b=3*a+4; は a の中身に 3 を書けて 4 を足すという処理をしたものを b に入れ
その次に a=2*b+3; の処理、すなわち b に 2 を書けて 3 を足したものを a に入れる。
そんだけ。
これはもう、質問以前の話で、完全に C のごくごく初歩をわかってないので、
普通に入門書を最初から読んで。
2019/03/07(木) 18:41:46.43ID:LVW4xgZwa
"1文字=1数字"の式をもたない連立方程式は解けないということですか?
2019/03/07(木) 18:43:15.30ID:LVW4xgZwa
>>579
なるほど…出直して来ます。
2019/03/07(木) 18:44:20.04ID:byd0ZGo00
その解法手順をプログラムで組まないと
2019/03/07(木) 18:47:10.49ID:s2VxUnjk0
あああ 数学的に式を記述したら解を求めてくれる mathematica 的なものを考えてたのか
残念C言語はそこまで親切じゃない
2019/03/07(木) 18:48:25.12ID:mVKClUMzd
むしろmathematicaだと解いてくれるの?すげぇ。
2019/03/07(木) 19:08:28.06ID:byd0ZGo00
連立方程式は無理じゃないか?
2019/03/07(木) 19:22:54.85ID:fFrTWbSf0
b=3*a+4
a=2*b+2

https://www.wolframalpha.com/input/?i=b%3D3*a%2B4;a%3D2*b%2B2
2019/03/07(木) 20:08:41.25ID:s2VxUnjk0
>>585
数値解求めるのもあるし
可能なら解析解も出せる(テイラー展開されてきもい出力になるケースもままあるが・・・)
2019/03/07(木) 21:29:00.33ID:Pol75wena
方程式解くのは計算というより言語処理感あるよなー
2019/03/08(金) 03:32:43.35ID:zYZkTFiw0
連立方程式を解くならLU分解(ガウス消去法)が一般的な方法
https://ja.m.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E3%81%AE%E6%B6%88%E5%8E%BB%E6%B3%95
2019/03/08(金) 06:04:01.43ID:jQY3XD9A0
代入を=にしてしまったのが不味いよな
やっぱ代入は矢印にするべきだわ
2019/03/08(金) 07:32:03.47ID:zYZkTFiw0
ASCII文字コードに矢印はない
2019/03/08(金) 07:44:58.78ID:p7qg4IcOd
>>591
<- これを使うって意味な
2019/03/08(金) 07:51:36.24ID:0HdenOKEa
単項マイナスと競合しそう
2019/03/08(金) 07:54:52.91ID:p7qg4IcOd
それは <-- こうしよう
まぁすごく今更だけどなw
2019/03/08(金) 08:03:45.11ID:zYZkTFiw0
<- 比較演算子と単項マイナス
<-- 比較演算子と前置デクリメント
2019/03/08(金) 08:54:22.03ID:NeLzfZqe0
== 代入と代入
2019/03/08(金) 09:19:21.38ID:zYZkTFiw0
式 + 二項演算子 + 単項前置演算子 + 式; OK

式 + 二項演算子 + 式 + 二項演算子 + 式; OK
式 + 二項演算子 + 二項演算子 + 式; NG
598デフォルトの名無しさん (アウアウウー Sac3-hLQV)
垢版 |
2019/03/08(金) 09:39:25.02ID:pv8HlopZa
代入を =: にしている言語あるな。
599デフォルトの名無しさん (ワッチョイ 335f-LDqw)
垢版 |
2019/03/08(金) 09:50:55.62ID:dZ4sYt+j0
>>598
:=
600デフォルトの名無しさん (ワッチョイ 335f-LDqw)
垢版 |
2019/03/08(金) 09:51:39.55ID:dZ4sYt+j0
数学用語を使うやつは馬鹿っぽい
601デフォルトの名無しさん (アウアウウー Sac3-hLQV)
垢版 |
2019/03/08(金) 10:43:26.56ID:pv8HlopZa
>>599
あ、そうだったか。すまん。
2019/03/08(金) 10:46:07.61ID:YyekWoUN0
もう昔のAPLみたいに変態文字集合にすれば?w
2019/03/08(金) 14:47:21.50ID:DIWS8ePoM
\数学用語を使うやつは馬鹿っぽい/
2019/03/08(金) 14:56:39.67ID:zM+hSklW0
そろそろGUIでフロチャート化や命令/関数アイコンの並び替えで作れる言語を!!

・・・そんなに利便性はあがらんか。
2019/03/08(金) 15:54:05.18ID:ojZ2oJ0M0
>>604
政府が作ってるやろ
2019/03/08(金) 16:00:54.92ID:iK4gPhWEx
はるかの昔からそういったGUIプログラミングツールやCASEツールがあったけど、どれも決定版にはなってないよね。
唯一、車業界でMatlab+Simulinkと自動コードが標準的に使われてるけど、あれはモデル化して徹底的にシミュレーションする目的がメインなのでちょっと汎用的には使いにくい。
実際吐き出されたコードはロジックに問題はなくてもソフト技術者から見ると目も当てられないぐらい悲惨なコードだし。
2019/03/08(金) 16:28:54.41ID:oUzck+rK0
多分要件定義を渡すとプログラムを作成してくれるAIを作る方が早いだろう

誰が作るかは知らないが
2019/03/08(金) 17:06:47.81ID:iA9EY6NmM
>>604
そんなんすでにいくらでもあるだろ
つScratch
2019/03/08(金) 20:20:35.60ID:q/o0JPH80
そりゃAIが作るんだろうよ
2019/03/08(金) 21:36:26.45ID:+4tnAN1A0
そのAIを作るAIを作るAIを作るAIを…
2019/03/08(金) 21:39:07.49ID:K5YfeukWM
>>610
そういうややこしい話はAIに考えさせるべき
2019/03/08(金) 22:15:29.34ID:2Mvu5LOb0
なんでこんなゲシュタルト崩壊みたいなスレになってるの?
みんな疲れてるの?
2019/03/08(金) 22:30:35.92ID:oUzck+rK0
君以外はAIの書き込みだよ
2019/03/08(金) 22:33:04.42ID:kP9nO1yc0
再帰とラムダ計算のやり過ぎで頭が沸騰してるんだよ
2019/03/08(金) 22:40:30.22ID:FVpVmqiRd
Cでなくていいならnode-redなんかはいい感じにグラフィカルだと思うわ。
2019/03/08(金) 22:55:58.20ID:+MPT5vgD0
AI 「めんどくせー、報酬出して人間に考えさせたろ」
2019/03/09(土) 06:17:25.50ID:sGXnYTxga
マイクロソフトのビジ男ってフローチャートからコード吐いてくれる機能あったよね、まだ生きてるのかしら
2019/03/09(土) 06:39:25.40ID:eo7E8WXr0
フローチャートではなくてUMLのクラス図からC++のコードを自動生成する機能だったと思う
その類の機能は廃止されたよ
2019/03/09(土) 06:50:13.86ID:sGXnYTxga
>>618
そうか、亡くなってたのか。一回触って無言で閉じた事しか覚えてないけど、根は優しい奴だった。
2019/03/09(土) 08:31:39.80ID:4ewQpv+T0
Executable UMLは見事に死んだな。あれはさすがに無茶だろうと思った。
2019/03/09(土) 08:32:04.32ID:zqjN2Zcb0
>>604
ほぼゲーム制作専用だけど、Unreal Engine4のブループリントが
完成度高いような
2019/03/09(土) 09:40:32.42ID:woQHdZ/f0
>608
ゲーム作れるようになりたいって言ってコンシューマ版PRGツクール買わされた気分。
2019/03/09(土) 10:05:30.78ID:UpidnITW0
返り値がポインタの関数って
int *func() {...}
↑みたいに関数名にアスタリスクが付いてるのが違和感あるんだけど何か理由あるの?
意味を考えればint* func()もしくはint * func()にするべきなんじゃないのかな
2019/03/09(土) 10:44:22.53ID:1jBEzlrN0
複数のポインタ変数を宣言するとき

int *a, *b →OK
int* a, b  →NG

ということがあるので前者の記述にする。
関数についてもそれに揃えてるだけ。

だと思ってるんだが違うかもしれん。
2019/03/09(土) 10:48:12.35ID:1jBEzlrN0
そんな書き方する人はいないだろうけど(というかできたっけ?)、極端な話、

int* func1(), func2();

という宣言だとダメだしね。
2019/03/09(土) 10:57:28.35ID:MFivwnzo0
昔、*をどこに付けるべきか議論あったね。
「int *」も型なのでスペース空けるのはおかしい、「int*」と書くべきだと主張してる人も結構いて、今もまれによく見かける。
統一してれば良いんじゃね?
627デフォルトの名無しさん (ワッチョイ de8c-OG2p)
垢版 |
2019/03/09(土) 11:42:25.92ID:TwFYMaY40
>>624
int *a, *b は *aと書くと整数。
2019/03/09(土) 11:54:24.82ID:DgSeYL2x0
int*ならtypedefやらtypeofやらつかえと思うわ
629デフォルトの名無しさん (アウアウクー MM07-LDqw)
垢版 |
2019/03/09(土) 12:13:21.98ID:MaTZH59sM
>>623
それC言語の初期はそっちの方が普通だったんたよ。
2019/03/09(土) 12:25:03.89ID:OCj0KbiTd
>>627
ん?そりゃそうだろ……
2019/03/09(土) 12:26:42.27ID:OCj0KbiTd
ああ、わかった。*aで正数になるから宣言するときに int *aって宣言すると自然だよってことか。なるほど。
2019/03/09(土) 12:30:40.70ID:OCj0KbiTd
でもそれなら
int *a; で*aがintになるから自然だけど
int* a; でaがint*になるから自然さはこっちでも同じだな。なんか俺勘違いしてる?
連投スンマソン
2019/03/09(土) 12:33:07.29ID:DgSeYL2x0
>>632
int* a, b
2019/03/09(土) 12:55:35.26ID:U1CZFrYl0
そう書いてbがint*にならないのが悪い
cの最初の設計が悪い
2019/03/09(土) 13:12:23.27ID:capoU8RA0
50年前のクルマに「性能が悪い」と怒っても意味が無い
2019/03/09(土) 13:22:50.25ID:DgSeYL2x0
だから、それしたいならtypedef使えって。
typedef int *(*f)(int *, void ** );
f a, b;

Cの型の表現方法はそこそこ合理的だと思うよ。
2019/03/09(土) 13:30:38.68ID:0bE0zR0l0
int* なんて型はCにはないけど。
ついでに、int*もトークン分割時点で int * ってスペース入るんだけどな。
int *pも int * pってなる。
2019/03/09(土) 14:00:08.50ID:KYpgksP4a
規格的には別にスペース入れろなんて書いてない様な気はするが…
int*xは良いんだっけ?
2019/03/09(土) 14:03:23.83ID:LaC4lObOa
>>638
tokenの区切りで勝手に解釈してくれるから問題ないよ。
スペースをいれる必要があるのは、入れないと前のtokenと連結して解釈されてしまうような箇所だね。
2019/03/09(土) 14:24:11.60ID:0bE0zR0l0
>>632
勘違いといえば、
int* が型だと思ってるところかな。
変数の前に付いた*は演算子。逆参照演算子って名前だったか。
2019/03/09(土) 14:26:56.54ID:4ewQpv+T0
一見似てるけど演算子とは別。
2019/03/09(土) 14:33:59.98ID:0bE0zR0l0
>>641
単項演算子って言えばいいの?
2019/03/09(土) 14:36:13.79ID:Hu0eNkce0
変数宣言のときと式の評価のときとでは、働きが間逆になる、ときいていますが、私も馬鹿になったので、そういわれていることをそう理解できなくなりました…
2019/03/09(土) 14:39:16.30ID:Q2jRdDZx0
宣言は演算子とは別じゃなかったっけ?
typedefもできるし規格はpointer typeって書いてるからポインタ型って認識も間違いじゃないと思ってたけど違うんかな
確かに一行での複数宣言だと確かにおかしなことにはなるけども
2019/03/09(土) 14:42:21.52ID:4ewQpv+T0
ポインタ宣言子というやつでデリファレンス演算子とは別。
2019/03/09(土) 15:09:30.52ID:YyCiAm6Za
演算子でしょ?評価順があるじゃん。
関数の()とか配列の[]も同じで、もちろんCだと宣言にも使うことになるけど。
2019/03/09(土) 15:12:58.76ID:2TgeLAXH0
>>640
意味的には int* は型。
でも文法的には * は変数名と優先的に結合するので、
変なことになってんだよ……。

C++ だと設計者 (stroustrup) が * を型名に寄せる書き方をしてるので、
近頃はそれが C にも流入してる感じ。
2019/03/09(土) 15:14:01.24ID:Q2jRdDZx0
C11の6.7.6.1にpointer declaratorって書いてあるから、宣言時の*はポインタ宣言子で間違いなさそう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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