C言語なら俺に聞け 150
■ このスレッドは過去ログ倉庫に格納されています
>>548
昼夜を問わず沢山のマウントありがとうございます。 >>536
すげー昔の話だがメモリー側で論理演算できるようにして1アクセスでビット単位操作を可能にした特許があったな
元々はグラフィック用で図形の重なりの演算をメモリー側でやるようにしたものだったけど
特開昭61-264453 >>551
前世紀の話だが液晶モニタ側にメモリ機能を有して
PCの電源落としても液晶モニタ側に必要な情報が画像として記録されてるから
再起動後すぐにデータを使えるようになる、なんてニュースが真面目に流れてたっけ たとえばFPGAだとビット操作向けのコンピュータ作れたりするんですか? >>553
外付けのSRAMやSDRAMではI/Fが決まってるので困難だけど、FPGA内で閉じて作るなら可能なんじゃないかしら。 大昔のDRAMには必要なビットだけ書き換えできるライト・パー・ビットって機能を実装したものもあったな そういえばGRAM用にそういうRAMが何種類かあったね。
OpenGLとかで全画面書き換えが当たり前の今では役に立ちそうにないけど。
C言語とは関係ない話題ですまんかった。 MB-S1はそういう回路を搭載してグラフィックの処理がやたら速かった。 X68000のVRAMは変わった仕様だったみたいだね。 Cはコンパイラにより
型の変数の容量どころかポインターすら変わる
きれいに書くことなどできん!
Cの恐ろしいことは、標準っぽい関数が
リソース開放の事を考えてなかったりする所w 表面的だな
どっかで吹き込まれたことの受け売りはすぐにバレる >>559
>Cの恐ろしいことは、標準っぽい関数がリソース開放の事を考えてなかったりする所w
それはどの標準関数ですか?具体的に指摘できますか? >>563
標準関数ではなく、
標準っぽい関数なんだから
相手にするだけ無駄かと。 その昔、printfはメモリリークするとかぬかしてたアホがいた 小学生のプログラミングの授業が始まったせいで5chにも大量に小学生が湧いてるな
学校でプログラミングを教えるのは勘弁してほしいは >>564
いえいえ、標準っぽい、というのだから、標準関数に近いという主観的判断があるのでしょう
それはそれで私は純粋に好奇心が湧いたのです ぼくのかんがえたさいきょうの標準っぽい関数
atod
stringをdouble型に変換する。
標準っぽいが標準でない。
リソース開放を試みるものの、constに阻まれる。 標準的な関数で痛い目にあったといえばlocaltime()
コイツがスレッドセーフじゃないせいでひどい目にあったよ……
まあ返り値がポインタな時点で疑うべきだったが。 >>570
atod() にてリソース解放の必要はあるのでしょうか? stringは無視するとして、const char*をdoubleに変換する標準ライブラリ関数はatofまたはstrtod 超*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
と出力されてしまいました。
何が間違っているのでしょうか??
長文スマソ int a,b;
b=3*a+4;
b = 3 * <未初期化の a は不定の値> + 4;
= <不定の値>
なにになるかはわっからんちん >>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 のごくごく初歩をわかってないので、
普通に入門書を最初から読んで。 "1文字=1数字"の式をもたない連立方程式は解けないということですか? あああ 数学的に式を記述したら解を求めてくれる mathematica 的なものを考えてたのか
残念C言語はそこまで親切じゃない むしろmathematicaだと解いてくれるの?すげぇ。 >>585
数値解求めるのもあるし
可能なら解析解も出せる(テイラー展開されてきもい出力になるケースもままあるが・・・) 代入を=にしてしまったのが不味いよな
やっぱ代入は矢印にするべきだわ それは <-- こうしよう
まぁすごく今更だけどなw <- 比較演算子と単項マイナス
<-- 比較演算子と前置デクリメント 式 + 二項演算子 + 単項前置演算子 + 式; OK
式 + 二項演算子 + 式 + 二項演算子 + 式; OK
式 + 二項演算子 + 二項演算子 + 式; NG そろそろGUIでフロチャート化や命令/関数アイコンの並び替えで作れる言語を!!
・・・そんなに利便性はあがらんか。 はるかの昔からそういったGUIプログラミングツールやCASEツールがあったけど、どれも決定版にはなってないよね。
唯一、車業界でMatlab+Simulinkと自動コードが標準的に使われてるけど、あれはモデル化して徹底的にシミュレーションする目的がメインなのでちょっと汎用的には使いにくい。
実際吐き出されたコードはロジックに問題はなくてもソフト技術者から見ると目も当てられないぐらい悲惨なコードだし。 多分要件定義を渡すとプログラムを作成してくれるAIを作る方が早いだろう
誰が作るかは知らないが >>604
そんなんすでにいくらでもあるだろ
つScratch >>610
そういうややこしい話はAIに考えさせるべき なんでこんなゲシュタルト崩壊みたいなスレになってるの?
みんな疲れてるの? Cでなくていいならnode-redなんかはいい感じにグラフィカルだと思うわ。 AI 「めんどくせー、報酬出して人間に考えさせたろ」 マイクロソフトのビジ男ってフローチャートからコード吐いてくれる機能あったよね、まだ生きてるのかしら フローチャートではなくてUMLのクラス図からC++のコードを自動生成する機能だったと思う
その類の機能は廃止されたよ >>618
そうか、亡くなってたのか。一回触って無言で閉じた事しか覚えてないけど、根は優しい奴だった。 Executable UMLは見事に死んだな。あれはさすがに無茶だろうと思った。 >>604
ほぼゲーム制作専用だけど、Unreal Engine4のブループリントが
完成度高いような >608
ゲーム作れるようになりたいって言ってコンシューマ版PRGツクール買わされた気分。 返り値がポインタの関数って
int *func() {...}
↑みたいに関数名にアスタリスクが付いてるのが違和感あるんだけど何か理由あるの?
意味を考えればint* func()もしくはint * func()にするべきなんじゃないのかな 複数のポインタ変数を宣言するとき
int *a, *b →OK
int* a, b →NG
ということがあるので前者の記述にする。
関数についてもそれに揃えてるだけ。
だと思ってるんだが違うかもしれん。 そんな書き方する人はいないだろうけど(というかできたっけ?)、極端な話、
int* func1(), func2();
という宣言だとダメだしね。 昔、*をどこに付けるべきか議論あったね。
「int *」も型なのでスペース空けるのはおかしい、「int*」と書くべきだと主張してる人も結構いて、今もまれによく見かける。
統一してれば良いんじゃね? >>624
int *a, *b は *aと書くと整数。 int*ならtypedefやらtypeofやらつかえと思うわ >>623
それC言語の初期はそっちの方が普通だったんたよ。 ああ、わかった。*aで正数になるから宣言するときに int *aって宣言すると自然だよってことか。なるほど。 でもそれなら
int *a; で*aがintになるから自然だけど
int* a; でaがint*になるから自然さはこっちでも同じだな。なんか俺勘違いしてる?
連投スンマソン そう書いてbがint*にならないのが悪い
cの最初の設計が悪い 50年前のクルマに「性能が悪い」と怒っても意味が無い だから、それしたいならtypedef使えって。
typedef int *(*f)(int *, void ** );
f a, b;
Cの型の表現方法はそこそこ合理的だと思うよ。 int* なんて型はCにはないけど。
ついでに、int*もトークン分割時点で int * ってスペース入るんだけどな。
int *pも int * pってなる。 規格的には別にスペース入れろなんて書いてない様な気はするが…
int*xは良いんだっけ? >>638
tokenの区切りで勝手に解釈してくれるから問題ないよ。
スペースをいれる必要があるのは、入れないと前のtokenと連結して解釈されてしまうような箇所だね。 >>632
勘違いといえば、
int* が型だと思ってるところかな。
変数の前に付いた*は演算子。逆参照演算子って名前だったか。 変数宣言のときと式の評価のときとでは、働きが間逆になる、ときいていますが、私も馬鹿になったので、そういわれていることをそう理解できなくなりました… 宣言は演算子とは別じゃなかったっけ?
typedefもできるし規格はpointer typeって書いてるからポインタ型って認識も間違いじゃないと思ってたけど違うんかな
確かに一行での複数宣言だと確かにおかしなことにはなるけども ポインタ宣言子というやつでデリファレンス演算子とは別。 演算子でしょ?評価順があるじゃん。
関数の()とか配列の[]も同じで、もちろんCだと宣言にも使うことになるけど。 >>640
意味的には int* は型。
でも文法的には * は変数名と優先的に結合するので、
変なことになってんだよ……。
C++ だと設計者 (stroustrup) が * を型名に寄せる書き方をしてるので、
近頃はそれが C にも流入してる感じ。 C11の6.7.6.1にpointer declaratorって書いてあるから、宣言時の*はポインタ宣言子で間違いなさそう ■ このスレッドは過去ログ倉庫に格納されています