◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:C言語なら俺に聞け 153 YouTube動画>7本 ->画像>4枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1566050562/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
仮想アセンブラは、元々、日本の情報処理資格試験用に、CASL2 が作られた。 個別のCPU 命令では、試験にふさわしくないから、抽象化した命令が必要だった でも、世界的には流行らなかった それで、学生が作った、LLVM に、Apple が飛びついた
実像を見てない試験で社会から乖離してるな バkの集団なんだろうか? それともz80の問題だしたらライセンス料でも払わないといけないのか? カネに掛けてはとかくケチな貧乏人が思い付きそうな小手先だ 至るところで独自規格で無意味の羅列、全く学習にならず、受けるだけムダな試験が練り上げられる
試験用のアセンブラは、仕様を公開せずに 試験問題の中で初見にすればいい それで対応力を試すようにすれば いくらか意味のある試験になる
以前に実施されていたマイコン応用システム開発技術者試験のアセンブラ問題は8080, Z80, 6800からの選択だった 現在の情報処理試験エンベデッドシステムの前身となった資格試験
実際に使えないものを教えられてるのは英語と同じだな CASLやっても機械語の練習にならない 「教育用」にまで形骸化すると使い物にならない、現実と実用から乖離する、ファンタジーになる、 これが「教育用」の弊害だ PASCAL不人気の原因もここら辺にあるんじゃねえか? IT界隈は教育用と実用の間で揺れてる
>>2 先生 700行の数式パーサーまたHPに載せて下さい!
コンパイルもリンクも正常に動いているようだぞ 生まれたのがバグじゃなくて良かったな ha ha ha
http://program-lecture.info/c_structure5.html ここのサイトを見ながら学習しているのですがこのshowStatus関数では何故int配列を
int型の仮引数で受け取れてるのでしょうか?配列は配列かポインタでしか受け取れないと思ってたんですが
その認識は間違ってますか
よろしくお願い致します。
>>13 showStatus()はint型でもint型配列でもなくcharacter型を受け取ってるようだが?
showStasus() の引数は struct person 型の実体を受けてる main では struct person 型の配列を用意 party[] 配列の各要素 party[0], party[1] のぞれぞれについて showStatus() を呼んでいる 本質的には void foo(int arg); int main() { int array[2]; foo(array[0]); foo(array[1]); return 0; } これと同じ
>>15 理解出来ました。ありがとうございます( ;∀;)
>>8 あのコードは今となっては時代遅れだ。意味がない。
下のコードの部分を実行すると、最後の行だけ2回表示されます。
理由はなぜでしょうか?また、最後も1回にするにはどう変更したら良いでしょうか?
よろしくお願いします。
http://codepad.org/WCL1vHLd >>20 if ( !fgets(buf, sizeof(buf), fp) ) break;
>>21 サンクス!
While 行と fgets 行の間にその行を入れたら1回になりました。
修正はこれで良いのでしょうか?
>>22 の修正だと最後の行以外にもだいぶ表示されなくなってました。
どうするのが正解なのでしょうか?
良いのか?って聞かれると 色々言いたくなる奴が大勢出てきそう
>>23 //while ( !feof(fp) ) {
while (fgets(buf, sizeof(buf), fp)!=NULL){
//fgets(buf, sizeof(buf), fp);
こんなんでどうか
>>25 うまくいきました! Thanks!
やっぱり俺に訊けスレですね。ここの人達はすごい。
if ( (fp = popen(cmdline,"r")) == NULL ) {
perror ("can not exec commad");
}
while (fgets(buf, sizeof(buf), fp)!=NULL){
printf("%s", buf);
}
pclose(fp);
最終的にこうなりなした。助かりました。
Ruby では、Windows の、powershell, clip コマンドも呼べる。 UTF-8, CP932 の文字コード変換もできる クリップボード内の複数行文字列の、各行の先頭・末尾から、 連続する空白類を除去して、クリップボードに入れる str = `powershell Get-Clipboard` str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換 ary = str.each_line.map( &:strip ) # 連続する空白類を除去する IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す clip.print( ary.join "\n" ) end
defineマクロで以下をやりたいです。 struct my{ int d0 =0; int d1 =0; int d2 =0; int d3 =0; int d4 =0; }: struct my val; val[0:2] = (1, 1, 1); と入力した時にvalのdata0〜data2に1が入るようなマクロはどう書けばいいですか?
__VA_ARGS__ つこて2段呼び出しだな qiita.com/saltheads/items/e1b0ab54d3d6029c9593
>>29 ありがとうございます。
リンクを参考に、可変引数にするマクロまでは出来ました。(作った関数が間違えていたらすみません。)
struct my def2(struct my val, int s, int e, int d1, int d2){
int *p = val.d0;
*(p+s) = d1:
*(p+e) = d2;
return val;
}
/*def3省略*/
#define GET_MACRO(_1,_2,_3,NAME,...) NAME
#define DEF(val,s,e,...) GET_MACRO(__VA_ARGS__, def3, def2)(val,s,e,__VA_ARGS__)
ここから、表記を変える方法が分かりません。
下のようなことをしたいのですが、このように書くとコンパイルエラーになりました。
どう書けばいいでしょうか。
#define VAL[A:B]=(...) DEF(VAL,A,B,__VA_ARGS__)
マクロ使わずにこれで十分だろ。 typedef struct my; val = (my){1,1,1}; val = (my){1,1,1,1}; 以下のようにはできるけど、 マクロの多用は誰もソースを読みたくなくなるから避けたほうがいいよ #define SET(v,...) v=(struct my){__VA_ARGS__} SET(val, 1, 1, 1)
>>31 すいません、説明不足でした。
どうしてマクロかと言いますと、3つのデータを入れたい場所が0〜2だけではなく5〜7や2〜4の場合もあるからです。
#define SET(x,s,e,...) memcpy(((int*)&val)+s,&(int[]){__VA_ARGS__},sizeof(int)*(e-s)) SET(val, 1, 3, 1, 1) SET(val, 1, 4, 1, 1, 1) 部下がこんなコード書いてきたら突っ返すわ
ID:Y/GLm+KZ0 が上司だったらと想定してみよう。
うーん、どうにかして上のように[]を使って書き換えることは出来ないのですかね。 ちなみに下のようにして全パターン定義しようとしたらエラーでした。何故でしょうか。 #define val[0:2]=(...) DEF(val,0,2,__VA_ARGS__)
>>37 なぜって、#defineを使用するための構文を完全に無視してるからだよ。こちらが思ったことを都合良く解釈してくれるわけでなく、構文通りの単純な置換をしてくれるだけだよ。
一度ちゃんと調べておいた方がいい。
>>39 なるほどです。
では、[]や:を利用して独自の構文を定義するのはC言語において不可能、ということですか?
>>40 不可能。やるなら自前でプリプロセサでも書けばいいが、そんなことするくらいなら、ソース上に書くのではなく独自のデータファイルとそれを読み込んでデータを初期化するような処理でも作れば?
>>41 ありがとうございます。
最終的な目標は、Cを他言語ライクな記述でコーディングすることなので、プリプロセッサについて調べてみます。
新言語作った方が良さそうな。 初期のC++みたいにC言語へのコンバータとして作っちゃえば楽だと思う。Cと同じで良い部分はほとんど素通しで行けるし。
あの変態的にC言語には見えないObjective CでさえほとんどプリプロセッサでCに変換してからコンパイルしてたと聞くので、やろうと思えばできるんだろうね。
独自言語を開発したときなんかはとりあえずCに変換するというのはわりとある話。 コード生成とか最適化とか考えずに済むから。 昔、独自じゃないけど、とある言語からCへのコンバータ作ったよ。 楽しかった。
コンパイル前にソースを別のソフトで変換、置き換えさせて・・・
#define ARR_NAME(n) arr##n int arr0 [] = {0,0,0}; int arr1 [] = {1,1,1}; int* select_arr(int i){ return ARR_NAME(i); } これはどうしてコンパイルエラーになりますか? ちなみにreturn ARR_NAME(0)だと正しく動きます。
タイミングの問題だ #defineはコンパイル前に解釈されるが 関数仮引数の値は実行時に渡される 実行時とはコンパイル〜リンクまで全て終わった後の話だ だから関数仮引数の値を#defineで置き換えることができない
arriという変数はない。プリプロセッサでは変数の中身までは見られない。
分かりやすかったです。ありがとう。 この機能の代替として良き方法はありますか?配列のdimを増やすしかないですか?
配列変数名はコンパイル時には分かっているのだから その配列のアドレスを格納したポインタ配列を用意してやる
__、 iー'゙゙゙゙''''ー-,/^´ ゙'; | ゙ゝ....‐ .} ! |, i____________......r'".'''゙ヽ . ..,,、 ,,. -/ `'ー | .' 、 ,..-'" l゙ __.. -''′ ./ . ,/ .`''''〜- ....---''''"゛ ,/ /.,, ,,..r'" `''ー、,、 _,,,-'" `!、 /'r‐、 ,/´ /゙゙', ヽ / レ'゙ ´゙リ´ . `^^゙゙゙゙゙゙厂j .! │ . l / | .l. 丿/ / . / ! l ! .,,....--ー'''''''″ / .| (、 . ! _ .ィ‐¨゙゙'广゛ ...... ./ ,ノ.l. `'ィ ..,,_/ ..-‐'"゛ 'l_゙'ーノ`' ..........,,_ .,, -" / │ .! ゙''''-. .i''i ヽ、 / .! ! ,)イ : ..,,,,,>u;;;;,、.__ _,,,.. / | " / . 、 ! .` | !, ,! ." ゙
グローバル変数を宣言する時、ヘッダファイルでextern int hogehoge;ってするよね。 *.cからヘッダファイルをincludeすると、 extern int hogehoge;を毎回書いたのと同じ状態になるの?
そうだよ includeはファイルをそのまま展開するだけ
>>60 被参照側(メイン)に int hogehoge と書く
参照側(サブ)には extern int hogehoge と書く
これが基本です、*.h を使うのなら
*.h に extern int hogehoge と書く
被参照側(メイン)に int hogehoge と書き、*.h をインクルード…@
参照側(サブ)は *.h をインクルード
@でヘッダと実体に矛盾がないかチェックします
お前がC言語を 使う前に
言っておきたい 事がある
かなりきびしい話もするが
俺の本音を 聴いておけ
初期化前の変数を 使ってはいけない
gets()関数も 使ってはいけない
文字列の長さと 配列サイズは別物だ
使い終わったバッファは ゼロクリアしろ
できる範囲じゃなくて 全部やって
https://twitter.com/satoru_takeuchi/status/1176429522687676416?s=03 https://twitter.com/5chan_nel (5ch newer account)
>>64 > 使い終わったバッファは ゼロクリアしろ
これは要らんやろ
パスワードやらなんやらの機密情報を保存したバッファは解放前にゼロクリアしようねという話です。 任意のバッファという意味ではありません。失礼しました
物凄く初歩的な質問で申し訳ないのですが 1%5のような余剰計算をした場合解は5になるのでしょうか0になるのでしょうか
それC言語固有の話じゃないし個々にやるべきかプロセス毎にやるべきかとかのポリシーもあるし
>>66 元のツイートした本人か。
ここ見に来ているとは思わなかった。
ゼロクリアだとそこだけ異様にキレイなので逆に重要な値が入るものと察知される 乱数値でクリアすべき
一々乱数計算しなくても数パターン乱数表つくってメモリコピーでもいいんじゃね?
そもそもゼロクリアされてるbss領域なんて重要なもの以外にも大量に存在してるので攻撃者がピンポイントで判断することなどまず不可能。 逆に綺麗すぎる乱数のほうが目立つ。
そこだけにするからバレると言うなら全部ゼロクリアすればいいってことでしょ > 使い終わったバッファは ゼロクリアしろ > できる範囲じゃなくて 全部やって
今の流行りは不変プログラミング スコープが短い云々ではなく使い捨て 再利用なんてしない
HDDだと少数回のゼロクリアじゃデータ復旧される可能性が残るけどメモリだったらその心配はないのかね?
>>78 DRAMはリフレッシュがあるので原理的に不可能な気がする。
SRAMもフリップフロップなら不可能な気がする。
スワップされてディスクに書き込まれたら終わりなのでスワップされないようにする必要がある。
windowsの細かな動きがわからんけどスリープとかでメモリ内容を全部ディスクに保存する動きしない? するなら言語レベルではどう頑張ってもディスクにデータを書き込まずにスルーする術なんてないんじゃなかろうか? ということは漏洩防止目的でバッファをゼロクリアする意味は無い? windows以外は知らん
スリープ処理って関数実行中でも起きるの? メッセージ待ちとかで起こると思ってた。
多分priemptされてたら実行状態でも普通にswap outされるだろうな。
スワップに書いてある内容がどのプロセスのものかをどうやって知るつもりなんだろう… てかそんなのがわかる状況ならそもそもセキュリティうんぬん言ってもしょうがないと思う
Linuxにはmlock()がある。
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/mlock.2.html 多分他のOSにも似たようなのはある筈。
なければ高度なセキュリティが必要なプログラムは作れない。
サスペンドでメモリ内容が全てディスクに書き込まれるような場合は暗号化サスペンドイメージを使うように予め設定しておくしかないようだ。(もはや言語の問題ではない。OSの問題)。
最終的にはOSやらハードウェアファームやらのレベルの話に行き着くんで上位レイヤーでの完全対応は無理 ならば他アプリが自アプリのバッファにアクセスできないよう下位レイヤーが保証してるならバッファクリアは不要ということになる? そんなレベルで心配が必要なことは個人的に触ることは無いと思うけど
関数ポインタの書式と宣言方法がわからぬ(´・ω・`) だれか助けてクレメンス
ここで講義始めるわけに行かないんだからもっとspecificに頼むよ
Makefileなどに書かれているCCって「C Compiler」の略でしょうか?
まずは燃料投下する必要があるんじゃないかな。C言語はダメとかクソとか、あるいは引数にvoidなんて見たことないとか、そういったことを書けば火が付いて3スレぐらいあっという間に消費すると思うよ。
C言語がクソなのは誰の目にも明らかだから燃料にもならない 何を犠牲にしてでも最速を求めなければならないとか 今時キロバイト単位のメモリしか載ってないとかで渋々使わざるを得ないだけ
>>102 プログラムに関係する問題を人に伝えたく、かつ、言語固有の事情をできるだけ排除したいときにあえて c で表現することはあります、普段書きはすでに c++ ではあるのですが
http://2chb.net/r/tech/1551247748/442-443 かと言ってC++にそんなにメリット感じないんだよなぁ。
python最強!python最強!python最強!
あんなに活気のあったスレがこんなに寂れるとは 5chから人が減っているという噂は本当だったか・・・
誰かYouTuberになって布教活動すれば良いんじゃないか? この際VTuberで美少女だけど実はおっさんがやってるってのでも良い。
>>109 C 宿題スレも激しく活況だったのに、ね、…
そう言えば中国にもYouTubeみたいなのがあってYouTuberのようなのをやってる人も居るのだが、顔を若く変換するアプリ使って40代だか50代のおばちゃんが20代ぐらいに見せかけてやっていたってのがあったなあ。 そういうの使えばお前らのハゲもフサフサになるに違いない。
顔を変換するアプリと言えばアダルトサイトに芸能人の顔を合成したAVが上がってたな 見た感じ本物と区別付かないぐらい精巧だった 個人的にここ最近の技術革新では一番衝撃的だったな
>>111 >>114 のらきゃっと + 顔バレあたりで現代に触れよう
printf("%*d", width, num); と printf("%2$*1$d", width, num); がなぜ等価でですか?だいたい等価?正確に等価?
ずばり日本人って利己的な奴ばっかだから会話から何まで発展しようがないんだな。 後はもう負の連鎖。
ワッチョイ取ったほうがいいんじゃないの? なんでワッチョイ付けてるの?
荒らされることで活気を保つというのもまたナンだなあ
本音だけど、何処の板もそうだけど、噛みついてくるのはすぐさま来るけど親身になって 答えてもそのまま逃げる奴ばっかだし、そりゃ人減るよ。 答える奴には聖人を求める癖に自分がカスすぎるじゃん。
他人に対する期待が多すぎるやつは いつも文句ばっかりぬかしてて 思い通りにならないと発狂する
依存じゃなくて利用だな 他人なんて自分がラクするための道具でしかないという
なくても困らない代わりはいくらでもあるものに対して依存しているとは言わない
$ ctags -R /usr/include/alsa をしても、int snd_pcm_open(...); 等が tags に記載されない。 どうして? どうしたら?
>>133 ctags --c-kinds=+p -R /usr/include/alsa
でどうだろ。
見当つくだろうけど「Cのプロトタイプ宣言部分も出力に加える」の意。
どうして、の答えは「デフォルトではプロトタイプ宣言部は対象外だから」だね。
構造体のメンバ変数に、関数のポインタ変数を入れて、クラスのメソッドのような感じで使ったりできると思うけど、そういう使い方って現実性あるかな?
>>135 デバイスドライバのたぐいは大体それのオンパレードだよね
>>135 C++がCへのコンバータだった頃はクラスをそんな風に変換してたんじゃないかな。
今はコンパイラが内部的にやってるんだろうけど。
組み込みプログラマになりたいんだけど入門書やった後は何したらいいの?
そんな質問の仕方で生きていけると思ってるのか? 自分で考えろ
>>141 横井与次郎さんの本が愛読書だったな、俺っち
手垢で真っ黒ボロボロ
組み込み用の何かを買ってきて何か作れば良いのでは? まあしかしこの頃は小さい組み込み用のやつでもLinux動くのあるし、良い時代になったもんだな。
>>141 PICとかハードを直接イジれるやつを隅から隅までイジれ。
逆にラズパイとかはお勧めできない。
30日でできる!OS自作入門ってやつは組み込みの知識としては全く必要ない? なんか楽しそうだからC言語の入門書終わったらやろうと思ってるんだけど
>>153 あの本はCPUの知識ないと何をしてるか分からないまま終わると思う
だから知識が増えた実感も感動も少ない(経験談)
揃えるツールも多いし著者が用意した奴だし
個人的にオススメの勉強法は自分で考えたオリジナル言語をCのソースに変換することかな
文字列処理の知識で実現できてなおかつC言語に詳しくなれるし、他言語の構文を学ぶきっかけにもなる
楽しそうだと思うものをやるのが一番学習には向いてる 組み込みも幅は広くてOSがあったりなかったり様々 やって全く不要だったとはならんと思うよ
何を持ってダメ?なのかがわからんから答えようがない 何使ったって楽しく勉強できるなら関係なくない? 勉強すれば次が見えることもある
>>157 ラズパイはダメってレスがあるからさ。Arduinoもダメなのかな?と思ってさ。
とりあえずやってみるわサンキュー
>>158 なんで?
組み込みは扱うものの範囲がベラボーに広いからターゲットが決まってないないなら 予備知識なんてそれこそ有りとあらゆる事を学ばなきゃならなくて時間の無駄 いきなりやりたいことに手を付けるとか目的の会社に就職する算段するとかの方が現実的
興味あるところを片っ端からやればいいよ 最近の新人はまともにコーディングしたことがない人が多くて驚く
>>161 >興味あるところを片っ端からやればいいよ
至言ですね…
つまるところアドバイスできるとすれば、この言葉にまとまってしまいますね
ラズパイでもArduinoでもPICでもブレッドボード用意してまずはLチカから トランジスタや7セグをやって、スイッチからの入力などとれるようになったら またそこで考える
>>154 この本アセンブリとC言語の勉強になったりしない?
>>154 式をコンパイルするところでだいたい挫折する
>>164 ならない
はじめて読む486の方が486倍マシ
まずはLチカでオームの法則を押さえよう 次はhFEだ フォトトラとダーリントン フォトカプラとHブリッジあたりまでできるようになれば あとはどうにでも
組み込みだろうが回路は回路の専門家が考える ソフトの新人が回路に意見しても聞いてくれないよ
制御系の場合は、LTIシステム、Z変換など制御理論の基礎知識がないとそもそもプログラミングが出来ない どの様にプログラムすれば良いのか迷い途方に暮れることになる
そういうのは実際に使う場面になってから勉強すればいいよ ソフトは範囲が広すぎてどうせ全て学ぶのは無理だから
そういえば抵抗のカラーコードって色弱の人とかには辛いんじゃないか? と、今ごろ気づく。
おじさんが若い頃は新人はPIOドライバを書くことから始めてたけど今じゃそれさえも最初からドライバやSDKで用意されてるものが多いしな。 組み込みソフト技術者を自称してる人でも最近じゃリセットエントリからSDRAM設定やスタック設定やセクション初期化とかmainがコールされるまでの部分を書ける人は少なくなってるね。
組み込み分野で、私はソフト屋でハードはわかりません、なんてぬかすやつはビルから投げ捨てろ
>>173 色弱で前までは気合で読んでたけど最近はスマホアプリとかで読んだりもする
なるほど。やはりそうか。 スマホアプリあってよかったな。
ものづくりC言語塾とかいうプログラミングの勉強サイト見つけたんだけどわかりやすいのここ
無駄なイメージ画像が矢鱈と多いね チャッチャと本題に入ればいいのに 肝心のコードのフォントサイズ一回り小さくしてね? 逆だろ逆
分野的には制御&組み込みだが論理回路とかは初歩の初歩くらいしか分からんわ 別に組み込み屋を自称する気もないけど
ポインタを返す関数の中身を他の変数にコピーしたいとき int a; a = *func(); みたいな事をしても良いんでしょうか? コンパイルしたら動きましたが… 普通こういうことはしませんか?
>>181 慢心せず謙虚でいるのはいいことだが
やる気のなさの言い訳にするやつに
同調はしないってことさ
>>183 func() の作り方次第
int x = 123;
return &x;
とかやってたらダメ
極論すれば対象をモデル化して状態方程式をプログラムで逐次演算するアルゴリズムを実装するのが本来の制御系の組み込みソフト 論理回路のソフト処理への代替はコストダウンの一環で取り込むことはあってもあくまでオマケ
>>178 抵抗って昔からカラーコードで抵抗値表してるのでは?今は変わったの?
>>192 部品を小さくすると高速化できるので
チップ部品が増えたが、そこにはカラーコードは使われていないからでは。
>>183 良いんだけどNULL返されたらおしまいなのでそのためにワンクッション入れるのが普通なのではないな。
実際 localtime() なんかはエラーの時にNULL返す事になってるしな。自分の所の変数にコピーする場合はまずポインタで受けてNULLでなければポインタの指してる先がコピーされるように書くよ。
>>180 典型的なアフィwebサイトと同じ造りなんだよな
一目でそっとじ
>>193 >>195
あの小さい四角いやつか。
電子工作何十年もやってなくて知らなかった。
ググって画像見た。
core-i7のパッケージ天面にも貼ってあるから電子工作してなくても見かけることはありそうだが
マイコン、ラズパイ、PLC, HDL, Rust ニコ生では、HDLまで行ってるw
https://ideone.com/y2Ogra で0.3がFalseになるのはわかるのですが、0.2がTrueになるのはなぜですか?
一応環境依存 内部が2進数の浮動小数点なら (普通の範囲なら)2倍は正確 0.3がfalseになるのがわかるなら わかりそうなもんだけど
double
https://ideone.com/9COXkq 0.2 True
0.3 False
--------
float
https://ideone.com/wzvO20 0.2 True
0.3 True
小数は無限個あるが doubleやfloatで表現出来る値は有限個 だから正確に表す事が出来る小数はごく一部となる ほとんどの環境では0.1を正確に表す事が出来ない だから近似になる 0.1の近似を3個足したものの近似と 0.3の近似 これが同じ値になるかどうかは運しだい
多くの環境では floatで24bit整数の範囲は正確に表現出来る doubleで53bit整数の範囲は正確に表現出来る floatでもdoubleでもlong doubleでも 元の値に対して2^nをかけても2^nで割っても (それが普通に表現出来る範囲であれば)誤差はない 1/n は、nが2^mの形でない場合は必ず誤差が出る このくらい覚えて置けばいい
趣味でC言語で遊んでるんだけど入門書読んで、 printf scanf if else switch等使ったプログラム作ったんだけど次に何をしたらいいかわからへんわ。
あんまりしっかりとポインタは勉強できてないんだけど、 ポインタっていつ使うの?って感じ。 組み込みやらんと基本的には使わない?
組み込みじゃなくてもある程度大きなプログラムになればガンガン使う むしろ一番使う型になるレベルで使うのがポインタになることもあるくらいには使う
ていうかscanfでポインタ使ってるで 文字列出力したなたprintfでも使ってる はじめは実感無いかもしれんが
全く実感ない printfってどうやってできてんの
とりあえずポインタの勉強はやり直すわ。 次にArduinoでも触ってみるか
オレオレprintf を実装しようとすると、鼻血が出そうで vsptrintf に○投げしてから加工する方向にいってしまう
>>215 関数に値を渡すのはわかるよね?
printfって関数に出力して欲しい数値や文字を渡してる
この渡すときにCPUの動き的には複製されたものが渡される
数値なら複製しても対して問題ないけど文字列の場合なんかだと複製することで消費されるメモリが増えてしまう
だから文字列全部を複製なんかせずに文字列の先頭の場所だけ渡す
受け取ったprintf側ではその場所を元に文字列にアクセスする
この場所を指し示す仕組みがポインタと呼ばれるもの
10文字でも1000文字でも先頭の場所、つまりアドレスは4byteとかで表せるので情報の受け渡し効率が良い
正確には間違ってる部分もあるかもしれんがだいたいこんなイメージ
>>217 そもそもvsprintfのある環境ならprintfあるでしょ。
組み込みとかなら低レベルの1文字出力は作らないといけないけど。
>>220 そんな感じですです あと暗に頭にタイムスタンプ付加したりとか
VZエディタのASMソース見たときは、整数onlyでも結構複雑だった
ポインタを使わないならCを使わない方がいいという程度にはポインタはCの肝 ポインタを使わないなら素直に安全で高級な言語を使った方がいい
エントリ関数を int main(int argc, char *argv[]) と書いた時点で ポインタを使ってる、とも言えるんだよな。 int main(void) で始めてるかもしれんけど。
int main()しか使ってないわ。どういう時に使うんだっけそれ
>>224 C言語を使う用途の多くは
組み込み、OS、ドライバ
だろ
簡単に言語を変えるとかいうなよ
コマンドラインから情報を受け取って処理したいときに使う 関数の引数と同じ
ポインタの使い方を覚えるって言ってるんだから それでいいじゃん
C言語でOS作ってみたいんだけどなぁ。入門レベルじゃきびしいな
>>231 簡単なRTOSでもまともに作るならCだけで書くのは不可能。
>>234 ほんの少しインチキをするだけで、全てC言語で書ける
バイナリコード直接記述? それはC言語で記述とは言わないような インラインアセンブラも同じ
>>234 大半はCで行けそうな感じはするけどな。実際にUNIXやLinuxはそうだし。
厳密に完全に100%Cにするとなると最初からそれを考慮してCPU作らないとできないとは思うが、かといってその必要性はないな。研究目的ならわかるが。
>>237 こういう知ったかして無知晒すバカはどうにかならんのかいな
痛いのが好きなんでしょう 鞭も旨い おそまつさまでした
>>237 100%Cでどうやって特権命令出すの?
Cプログラムが動き出せる最低限の準備は何だか知ってる?
動き出すだけなら100%C言語って今時珍しくも無い
スタートアップルーチンに頼らずにmain関数が自立起動するのか
>>241 「すべてC言語で書ける」に突っ込み入れられてるだけだろ
>>242 OSの話だよ?
> startup.s/head.s 明日から仕事来なくていいから。
>>243 スタートアップをC言語で書くって話でしょ
まあ気合いでなんとかなるさ
>>241 大半を100%とは言わないし、
100%CのUNIXやLinuxが大半でもない
話を逸らすな
スタートアップコードなら100%Cで書けるマイコンは珍しくない
OS 100%は無理
>>240 が話題を追加したの
231 CでOS作ってみたい 233 RTOSでさえ無理 234 Cだけで?そりゃ無理 237 100%Cは最初からそれを考慮したCPUならできる ←キ 238 237はシッタカ 240 特権命令は?Cプログラムが動き出せる準備は? 241 大半は100% ←キ 243 スタートアップ不要のmainとは? 244 OSの話だよ? 247 話を逸らすな 248 スタートアップだOSじゃない ←キ
>>248 >OS 100%は無理
そこも気合いでなんとかなりますぜ!
※気合いとは、次みたいなコードもCとみなしてしまう心意気を指す
int main=195;
>>240 の
一行目は特権命令の話
二行目はスタートアップの話
に見える
>>251 違う
スタートアップの話なんざしてねえよ
おまえベアメタルの経験ゼロだな
いや、 どっちかっていうと趣味みたいなもんで いろんなCPUでやってるけど ただ単に Cプログラムが動き出せる最低限の条件 と書いてあるんだからOS起動ではないでしょ
話の発端からずっとOSの話で シッタカを指摘されて悔しくて悔しくて仕方なくて スタートアップの話に逸らそうとしているのが約1名いるが
Cプログラムと書いてあるんだからCプログラムだろ OSが起動出来る十分条件ではなく、必要条件の1個 特権命令もその一つ もっとも特権命令が存在しないCPUや使わなくてもOSがつくれるCPUがあるので 必要条件ではないけど
ベアメタルであれば尚更main関数を呼び出す前に割込みベクターやスタックポインタの初期化などいろいろ準備が必要だろ OSに頼れないので自分で準備しないとC のプログラムは動き出せない
とりあえずCでOSでスレが活性化することはわかった。機会があったら他の掲示板でもやってみよう。
>>250 レギュレーション違反ですw
>>236 > バイナリコード直接記述?
> それはC言語で記述とは言わないような
>>257 最近のプロセッサはスタックポインタの初期値はリセット時に決められた番地から読み出すことが多いと思う
割り込みベクタはメモリーに書けばいいだけじゃね?
>>261 >スタックポインタの初期値はリセット時に決められた番地から読み出す
プログラムカウンタの方じゃないですか?
そのメモリ、いやもっと言えばバスの初期化はいつ誰がやるのかと。
>>257 それってすなわちスタートアップコードですよね?
何度も書くけどスタートアップコードを全てCで書けるマイコンは今時珍しくないんですよ
>>264 >>236 の内容に加えてpragma疑似命令もC言語で記述とは言わないと思う
C言語の構文だけではスタートアップの記述は無理だろう
>>262 68KとかARM Cortex M
0x00000000~3 ⇒ SP
0x00000004~7 ⇒ PC
Cだけで起動できるCPUって、まさかとは思うがPICじゃねえだろうなwww
ROM/RAM内蔵のMCUとROM/RAM外付けのMPUのでは前提が違うので議論が噛み合わない。
>>257 や
>>263 は後者の話をしている。
PICと言った意味も通じてねえな、こりゃw まさかの更に下をくぐりやがった
OSの無い組み込み環境なんて山ほど存在してて、その環境の中で全部Cのもで書いてるとこも存在してる そもそもOS入れられるような環境とは言えないけど、こういうとこでCで書いてるものにOS的な動作をさせればそれはCのみで作ったOSと言えるのか? おそらくどこからどこまでがOSの領域か?がずれてるから延々と罵り合いになるのでは?
ARMとかRXとかSHとか... スタートアップ含めCだけで書ける (全ての環境でとは言わないけど)
組み込み用の処理系についてはメーカ独自拡張の独壇場 コンパイラ本体は __section __bank __interrupt など独自拡張多し プリプロセッサも #pragma で設定弄らないといけないので注意
スタートアップファイルはC言語のような殆ど何か別言語に近い感覚
>>276 そのスタートアップはどうやって起動するんだよ
>>273 PIC8からPIC32まであるのにPICだけで話が通じると思ってるのはちょっと世間知らずすぎる
>>276 具体的な環境書いてみ
configでスタートアップルーチンを生成してるとかのオチじゃないよね?
いまなら、C言語だけで書いたOSをUEFI でロードして起動するとかできるだろ? C言語で書けない操作は UEFI 側で設定したものをそのまま使う
PC-88/98のFDブートはFDの最初のセクタから256バイト読み込んで実行するんだっけ? そのプログラム書くのに適したCコンパイラってあるの?
ビジネスで優秀な人材育成する上司は何を教えているのか?
VIDEO ;t=13s
マクドナルド伝説の店長が教える、最強店長になるために必要なこと
VIDEO ;t=3154s
「最強の働き方」長時間労働やノウハウよりも大切なこと
VIDEO ;t=3606s
美容師の楽しさ再発見!やる気スイッチが入る働き方セミナー
VIDEO 視覚障がいを乗り越えた活法家
VIDEO ;t=805s
ヒヨッ子が物を知らねえのは別にいいんだよ、当たり前 シッタカこくのと指摘されてからの逆ギレが攻撃対象になるんだ
>>283 gccの場合は自動的にcrt0-efi-x86_64.Sをリンクするようだが
ものづくりC言語熟おいしい!一番好きなバーガーです!! って言ってほしいのか?
C言語のポインタはCPU機械語における間接アドレシングの抽象化だろ? それ以上でも以下でも無い
>>284 ないです。
余りにもバイト数が少なすぎるので手書きです。
手書きでもバイト数に気をつけて書く必要があります。
>>296 インクリメントは良く出来てるな
あとポインタのポインタと配列へのポインタの文法を混乱して覚えてる人が居て
そいつらのせいで劣化コピーが出回ってるのがさらなる混乱の原因
正しく理解して正しく使えばCのポインタは何も難しくない
>>299 劣化コピーの具体例をよろしく
この文章だけだと何が問題なのかさっぱりわからん
二次元配列は二重ポインタで扱うという自分の勘違いを正当化したくて mallocでポインタの配列を作るやり方を唯一正統と強弁するアホが fjで暴れてたな、そういえば
ポインタのポインタ **p 配列へのポインタ (*p)[] ポインタの配列 *p[]
>>300 みたいなのを炙り出せたのであれば
レスに意味があったと言えよう
>>301 めんどいだけでポインタのポインタでも2次元配列かけるでしょ?
勘違いってどういうとこ?
>>304 本人か?
char a[2][2],**b=a;
これが勘違いでないとまだぬかすか?
頭がバカなのか、それともトンマなのか、どっちだ?
>>299 アセンブラやったことのない人は中々正しく理解できないようで、それでポインタの事だけ書いてある本が沢山出ちゃうんだろうな。
何年も書かないと忘れるな〜 ポインタのポインタは、ポインタの値を参照渡しするときくらいしか思いつかん char *p; foo(&p); void foo(char **p) {…} みたいな、 305のような書き方はピンとこないわ
>>304 書けるかどうかじゃなくて
> 唯一正統と強弁するアホが
いたって話でしょ
int a=0; int *pa=&a; int **ppa =&pa; int ***pppa = &ppa;
でもこういう関数だとポインタだけでやりたくなる mul(double** x, double** y, int n, int m){ mul(double x[][20], double y[][20], int n, int m){
関数の引数に限って言えば func(**p) func(*p[]) func(p[][]) func(p[][10]) どれでも同じ 引数として配列を引き渡す方法はない どれも先頭要素へのポインタが値渡しされる 関数側で引数がポインタへのポインタ(いわゆる二重ポインタ)なのか、ポインタの配列なのか、配列の配列(いわゆる二次元配列) なのか区別する手段はない 引数に配列として要素数を渡してもエラーにはならないだけで無視される
どこから突っ込んでいいやら・・・ 出鱈目にも程があるぜ
関数の宣言文で説明だけなので変数型を省略してるだけだろ 配列の変数名がpならば呼び出しは func(p) でもいける 結局は先頭アドレスさえ渡せれば何でもいい
>>314 プロトタイプ宣言しておけばC言語としては違う状態になるよ。
プロトタイプ宣言では状態を区別はしない
プロトタイプ宣言
void func(char *p[]);
関数定義
void func(char **p) {}
>>308 あほか
>>305 は間違いの例だから
ピンと来なくて当然
>>311 何を目的に書いてるのか知らんが
A: mul(double** x, double** y, int n, int m){
B: mul(double x[][20], double y[][20], int n, int m){
C: mul(double (*x)[20], double (*y)[20], int n, int m){
AとBは等価じゃないぞ
変数としてのxは A:double型のポインタを指すポインタ B:double型の配列を要素とする配列の先頭要素を指すポインタ C:double型の配列を指すポインタ 関数の引数としてのxは A,B,Cすべてdouble型の参照オブジェクト(何でもいい)を指すポインタ
>>322 >>321 のxのことを言ってるのなら、基礎からやり直せ。
まあ実際C:のような例は見たことはないけど、少なくともA:とB:は関数の引数としては同じと解釈される 中身は受け取った関数側でプログラマが処理する事案であってdouble型の何かを指すポインタという以上の意味はない
分かりきった固定要素数の配列を渡すのはいっかい struct で包んじゃうわ struct foo { double array[20]; }; mul(struct foo* x, struct foo* y, ...)
>>323 ,326
ただの罵倒ではなくてもう少し有益なレスしろよ
>>324 A,Bそれぞれのsizeof(x)やx+1について、値や型を比較してみろよ。意味が違うことがわかるから。
>>327 >>314 func(p[][])
似たようなもんだな
>>328 一応言っておくけど
>>322 の通り変数のxは意味が違う
関数の引数の場合だけ状況が変わる
*p[]と*ppが同義なのは引数の場合だけ
>>319 の通りプロトタイプ宣言と関数定義の両方で混在しても問題ない
>>330 >>319 の言ってるのは
>>322 のとは違うだろ
これは正しい
>プロトタイプ宣言 void func(char *p[]);
>関数定義 void func(char **p) {}
これは間違い
>プロトタイプ宣言 void func(char p[][20]);
>関数定義 void func(char **p) {}
初めて書き込む初心者ですが 配列存在そのものがポインタと違う という話と ポインタとして渡して同じように扱える という話の食い違いをしてるのですか?
ポインタの配列はポインタのポインタとして扱えるが 配列へのポインタはポインタのポインタとして扱ってはいけないって話 そりゃ無理に使おうとすれば使えない訳じゃないが止めた方が良い
char a[2][2]; これは a[0][0], a[0][1], a[1][0], a[1][1] の順にcharが4個ならんだデータ char *b[2] = {a[0], a[1]}; という配列をaとは別に作ってはじめて char **として扱える
aは(中身は)4このデータの先頭アドレスで bはアドレスの配列の先頭アドレス データが異なるので無理やりキャストしてもダメ
なんで & より == の方が強い? なんで func と &func 両方とも関数へのポインタ なんで char の符号有無を規定しなかった?
プログラマーは万能である で、あれば、それらは些細なことだ
>>345 ===は比較演算子で、&はビット演算子(扱いは算術演算子と大差ない)だから。
funcと&funcが同じなのは単なるシンタックスシュガー。 配列のそれと変わらん。
charは符号もへったくれも無かったため。 最上位がパリティなことも多かったし。
char hoge[10][10]; があったとして hoge と &hoge[0][0] が一緒なのは判るが &hoge とか hoge[0][0] は一緒じゃない
算術演算子と大差無いと言うならなおさら優先順位が逆転するのは不思議 つうか神様への質問なんだからなんでそういう仕様になったかを答えてほしんでしょ
>>347 ===って、Bにあったやつか?
等値比較代入
比較演算子が最下位ならすっきりする a + 1 == 2 → (a + 1) == 2 の順と同じく a & 1 == 2 → (a & 1) == 2 や a % 2 == 1 → (a % 2) == 1 であってほしい
わたしゃ神様じゃないけど、カーニハンとパイクの『プログラミング作法』には 「カッコを使って演算子の優先順位の曖昧さを避けよう」みたいな項があるね。 もちろん規格では厳格に決まってるけど、使用者の記憶があやふやって話。 あの辺を読むと「ビット演算子より比較演算子を優先したのは誤りだったかも」と ご当人が思ってたんじゃないかと感じるわ。
>>342 K&R1 から K&2 への相違で強烈に疑問を持っているのが
引数に配列をとったときは、配列の先頭のポインタが渡るのに、引数に構造体をおいたときは、構造体の実体がコピーされて渡されるのはなぜ?
馬鹿が
struct A {
int a[1234567890];
};
とかやったときには、これが関数の引数に乗ったときには、正気でコピーする気なのですか?
ん? 構造体が左辺値変形されるなんてことあったか?
2点ほど訂正させてくれ。 カーニハン先生はC言語に大きな貢献をしてるけど、C言語の設計は リッチーさんの仕事でカーニハンさんは手を出してないんだね。 だからこの場合「ご当人」と呼ぶのは正しくなかった。 「ビット演算子より比較演算子を優先するとは、デニスの野郎め 下手コキやがって」と思ってるんじゃないかと感じるわ。 …という具合に訂正。 もうひとつ。カーニハン先生は今の時点で健在らしい。 実は先の投稿の時点で亡くなってると勘違いしていた。 これもリッチーさんと混同したのが原因。
>>342 extern はいらない子!じゃないのですか?extern の必要性はなんですか?
>>342 可変長引数のプロモーション(格上げ)が理解できない
なぜ float は double に、char, short, は int に格上げされるのか?
>>355 構造体のポインタを渡すとして、仮引数はどう宣言するよ
>>358 いらない子はtentativeなんだが
tentativeはtentativeの存在すら認識できない
知恵遅れのための必要悪だ
おまえのためだったとして
本当のいらない子は誰だろうね
>>360 関数の引数には、構造体のポインタではなくて、構造体そのものを渡します、構造体そのものを渡せるようになったのは K&R2 から可能になりました
C の神
>>342 に、この改変―個人的には改悪について、一度お聞きしたいと思っていたんです
なぜ神への質問を神でないものが回答するのか 神にでもなったつもりか!
ヘッダファイルには何を書きますか? こめおしだるまとかですか
charは文字だから符号は重要じゃないってのはいいが、ならbyte型用意しておいてくれよと思う。
signed charもunsigned charもあるだろ
signed charもunsigned charもcharもあるのが糞
char = unsigned char に固定してくれりゃ万事楽だったのに
「8ビットめいっぱい使う奴(国)が面倒おこしてめんどくせぇ」
文字割り当てで最初から8bit全桁使ってしまっていれば良かった
8bit整数はsigned/unsigned charでいいやと思っていたらC++で裏切られた。
2バイト(16ビット)もあれば、各国のが収まるだろ? →ダメでした
なんでstaticにこんなにたくさんの意味をもたせた? 引数のconstが絶望的にわかりにくいんだが何でこんな文法にした?
const char * * char * const * char * * const たしかに分かりにくい volatileも
>>377 くそ、何がだよ。constの何がそんなにわかりにくいんだよっ!ちくしょうっ!!
voidならsp使わないという利点があるんだからいるのでは?
void君見てんだろ? またあの名言聞きたいよ てかspて何だ?
fj.comp.lang.c japan.yoso 何年前…
(´-`).。oO(今の人は newsgroup なんて知らないんだろうなあ・・・)
voidならスタックポインタを使わない? 意味不明
何十年経ってもマウント取られたままなやつは 成長する意欲すら根こそぎ取られたただの産廃 唾棄するにも値しない
>>407 某ゲームで、ボスバトルまでの待ち時間が結構ありまして、そのちょっと前のタイミングを知るのに
ストップウォッチ兼タイマー ver 0.1 を愛用しております。 自分で作ってもよかったのですが
蟻さんので必要十分だったのでありがたく使わせてもらっています。
ありがとうございました!
>>413 TDM-GCCだとコンパイルできなかった
>>417 リソースがsjisだからUTF-8にして、コードページにちょっとしたトリックをするとビルドできるよ。
>>419 蟻人間さんプルリク送っておいたからマージしてね
大学の課題でフーリエ変換を利用した画像保存プログラムを作成せよっていう 課題が出ました… もうお手上げです。助けてください
>>423 宿題の文章を一文字も間違えずに正確に転載できる技術を持っているのなら
http://2chb.net/r/tech/1434079972/ で話の続きを聞く準備はあります、その出題自体はどこか変だとは思っていますが
>>424 >>425 そうです。
実際に本気で組んだら何行くらいになるんでしょうか?
それだけでも目安を教えてほしいです。
例えば
木の絵をピクチャーボックスに描きました。
フーリエ保存してファイルを作成します。
ファイルを再現できました。
同じ絵です。
成功です。
こんな感じです。
元の画像に戻ったら成功って事はフーリエ変換と逆変換かな? フーリエ変換は外部ライブラリ使ってok? okならOpenCV使えば良いんじゃね?
画像圧縮でフーリエ変換は罠だな、最初からDCT使って提出しようず
単機能だから、AWS Lambda で出来ないのか? ライブラリを探すだけだろ C/C++, PHP は、Lambdaには採用されていないけどw
>>426 何でも良いなら
1x8に区切って1次元でフーリエ変換して
適当にビット数を減らして保存
読み出してビット数を元にもどして逆フーリエ変換
フーリエ変換は
abcdefghhgfedcba
のようにすると
同じ結果が2個ずつ出るので
半分だけ保存する
8x8でやるなら 横でフーリエ変換した結果に対して縦でやればいい 16個のデータにするのは横とおなじ
フーリエ変換をDCTに変えて ジグザグスキャンしてハフマン符号化すると jpgになる
大学の課題と言うくらいだから画像云々はただの手段で目的はフーリエ変換というかFFTのアルゴリズムを実装できるか というのが評価基準だと思う 間違って外部ライブラリを使ったり変に出題者の意図を捻じ曲げて解釈したりすれば減点される可能性高いから注意しろよ
>>435 みんな大学の課題という前提を忘れて実務的実用的な話になってるよね
フーリエ変換と逆変換をプログラムで実装できているかが採点基準であって
画像はバイナリデータがちゃんと元に戻っているか確認する手段にすぎないと思う
圧縮って書いてあるんだからバイナリ一致しなくてもいいのでは? 同じ絵っていうのはパッと見同じってことじゃなくて?
隣接ピクセル間隔より狭い高調波は不要だから有限の離散フーリエ変換でも 実質可逆とみていいんだよね? (符号化による情報落ちを考慮しない話)
圧縮が目的でフーリエ変換するのに 何も情報を減らさずにそのまま戻してどうする?
>>441 心配しなくても
ナイキスト周波数を越える成分はフーリエ変換の結果には含まれない
>>423 >>426 離散コサイン変換じゃいかんのか
>>432 どうせ課題なんだしそこまで求めてないというか
もしすごいのが出来たら教授が自分の成果にして発表するんやろ
講義での学習課題としては非圧縮でないと判定が面倒だな 単にデータを間引いただけなのか演算を間違っているのか確認に手間が掛かる むしろ完全可逆で実装した方が採点する側としては分かりやすいだろう 出題者の意図はどこにあるか質問者は理解しているのだろうか?
なんで理解しなきゃいけねーの そういう旨なら文章にハッキリ書いてくれねーと困るワケ お気持ちを察せよ なんてのが罷り通る案件なの?
「オメーの気持ちなんてしったこっちゃねー オレに分かるように話せ」 が今の潮流 分からないように反為さないヤツは無視していいし排除していい なんつったってオレが理解出来ないヤツは何言ってるか分からないコミュニケーション不可能な敵に近いからな 気持ち悪いから排除してもいいし、何よりオレに理解されようと思ってない だから排除していいでしょ ……という思考で動くのが現代の日本社会
いやクライアントの意向を無視して好き勝手やっていたら仕事干されるだろ
保存とは書かれているが圧縮とはどこにも書かれてない件
てか皆さん「フーリエ変換くらい当然知ってる」って雰囲気なのが凄いわ。
圧縮しないなら 保存でフーリエ変換使う意味がわからんがな
フーリエ変換そのものは理系の大学卒であれば誰でも知ってる 具体的な数値計算のアルゴリズムを知っているかはその人の専門分野による
専門課程ではなくても一般教養の数学系の講義で学んでると思うけど
微積と線形代数ぐらいで触らんかったぞ 大学なんか講師次第だからなあ
文系だと無いと思うな 統計学や代数幾何、微積分 この辺まで
はるか前なので忘れたが、大学ではフーリエ級数って名前だった希ガス
理系の大学卒だが フーリエ変換を大学で習った記憶はないなあ 覚えてないだけかな?
フーリエ変換はフーリエ級数展開の一般化 フーリエ級数展開の基本周期を無限大まで拡大すると周波数成分は離散から連続となる 要するに周波数成分を連続スペクトルとして扱うのがフーリエ変換
数学科院卒だがフーリエ変換には掠りもしてない 工学部の一部しか触ってないだろう
工学部では厳密な理論よりも応用が重要なので表面的な触りだけで深入りはしない 厳密な議論はやはり数学者の分野だと思う
画像処理はOpenCVとかで済ましちゃうから細かい数式は気にしない
それには同意 フーリエ変換の利用にはFFTの概要だけ理解していれば十分 ただ数学の専門家が掠りもしてないというのは如何なものかとは思う
>>468 数学的にはとっくの昔に解決してるから
あとは工学系の仕事
>>470 応用数学とかそういう分野ならまだしも
純粋な数学者はそんなことには興味がない
ラプラス変換やz変換あたりだと完全に工学分野だけどフーリエ変換くらい汎用なものは数学分野でも活用されてると思うけどね フーリエ級数はローラン級数などと同じ複素解析の基本的な考え方でしょ べきに展開するか指数に展開するかの違いくらいのもの
無理を言ってはいけない 数学者には楽器は作れても名曲を作る事はできない
名曲を作るのは数学者でも物理学者でも工学博士でもない 発明家や企業だ
沖縄音階は適当にランダムに音出しても曲に聞こえちゃうけどな
>>479 それは沖縄音階に馴染みがないから、沖縄音階が使われているだけで沖縄っぽいと感じてるだけなんじゃないかな?
沖縄の人からしたら、そんなデタラメでは曲として成り立ってないと思わないのかな。
そういった抽象的な感覚を数値化して扱うための手段がフーリエ解析やスペクトル解析と呼ばれる分野 音楽の音階(周波数)やリズム(時系列)を分解して客観的に評価するのが科学的なアプローチ
確かにフーリエ解析では周波数成分の変化の時系列データを扱うのは難しい 少し浅はかだったなすまん それにしても数学者が理論を確立して証明しそれをベースに開発が進むという典型例だな
200年くらいかかってるな ベイズで100年ちょっとか
>>480 さあ?まあ、実際にやってみな。自分でピアノやオルガンのキーを沖縄音階で適当に押すだけでわかる。
自分で弾いたら曲になるように弾いちゃうからランダムじゃない 本当にランダムで弾いたら曲にならない
ム板ならそれらしくランダムに演奏するソフトうp汁
VIDEO 質問失礼いたします。 以下のpopcountは引数xを2進数で表したときの1の数を返す関数なのですが、 動作原理がよく理解できないため考え方のヒントなどをいただけないでしょうか。 int popcount(unsigned long long x) { x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555); x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333); return (int)(((x & 0x0f0f0f0f0f0f0f0f) + (x >> 4 & 0x0f0f0f0f0f0f0f0f)) % 0xff); } 以下のpopcount2は自分で作ったもので、これならうまくいくことは分かるのですが、 上のpopcountも本質的には同じことをやっていると考えていいものなのでしょうか。 int popcount2(unsigned long long x) { int n = 0; for (int i = 0; i < 64; i++) { if ((x & 1ull << i) != 0ull) { n++; } } return n; } どうぞよろしくお願いいたします。
https://ideone.com/8LfIh0 こんにちは。
ちょっと思いついたので、こういうコードを書いたのですが、
普段からreallocを使わないのでこのコードがあっているか解らないのです。
これで大丈夫ですか?
>>490 reallocが成功した場合古いポインタに対してfreeは呼ばなくていいと思いますよ。
reallocの戻り値は古いポインタと異なるものになる保証はないはずなので、
freeを呼んでしまうとせっかくreallocした領域まで解放されてしまうかも。
>>492 ちゃんとコードを読んだら↓の部分はケアされてましたね。失礼しました。
> reallocの戻り値は古いポインタと異なるものになる保証はないはずなので、
ただ、reallocが成功したらfreeは呼ばなくていいのは間違いないと思います。
>>489 超高速ビットカウント
でググって出てくるページでちゃんと解説してくれてる
この手のよく見るやつはちょっとググれば解説見つかる
何を本質と置くかによるけど両者はそもそもアルゴリズムが違うのでその観点からなら違う
どちらのコードも結果は同じでも前者のほうが圧倒的に処理速度が早い
ビット数などが必要になる処理では速度が重要になるケースも多々あるので結果が同じでも後者は使い物にならない場合もある
>>496 レスありがとうございます。紹介していただいた記事を読ませていただき、大変勉強になりました。 ただ、>>489 の場合だと「ビットカウントするデータ列がある程度長い場合」には 当てはまらないため記事の前半の内容がアルゴリズムの基本になるとか思うのですが、 私が理解した範囲で記事の内容を参考にして関数を作成しても以下のようにしかできませんでした。 int popcount(unsigned long long x) { x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555); x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333); x = (x & 0x0f0f0f0f0f0f0f0f) + (x >> 4 & 0x0f0f0f0f0f0f0f0f); x = (x & 0x00ff00ff00ff00ff) + (x >> 8 & 0x00ff00ff00ff00ff); x = (x & 0x0000ffff0000ffff) + (x >> 16 & 0x0000ffff0000ffff); return (int)((x & 0x00000000ffffffff) + (x >> 32 & 0x00000000ffffffff)); } しかし >>489 の関数はこれを途中で打ち切って % 0xff をくっつけたような形になっており、 やはり完全な理解には至っていない状況です。 もし可能であれば、この部分についてもヒントをいただけると大変嬉しく思います。 たびたび申し訳ありませんが、どうぞよろしくお願いいたします。 >>497 64ビット長のビットカウントの最大値はたかだか64なので8ビット(最大255)で表現できる
一方、64ビットデータの分割統治による畳み込み計算は1回目で2ビット×32組、2回目で4ビット×16組、3回目で8ビット×8組の結果が得られる
ビット数を求めるだけなら3回目の結果が得られた時点で8ビットの最大数(255)で3回目の畳み込み結果の剰余を求めてやればそれぞれの組の重み(ビット数)が計算できる
(64を超えることはないことが明らかなので)
>>498 わかりやすいご説明どうもありがとうございます!ほぼ理解できたと思います。
たとえば十進数の123を十進数文字の最大値9で割った余りは
1+2+3と等しくなりますが、これと同じ原理ということですよね?
ただよくよく考えてみると、そもそも十進数の各桁の合計を9で割った余りが
元の数を9で割った余りと等しくなることについても
お恥ずかしながら豆知識として知っているだけで原理を理解できていませんでした。
ただこれに関してはもはやC言語ではなく算数の問題なので、
その方面の解説サイトをググって勉強しようと思います。
なにはともあれ、回答してくださった皆様方、どうもありがとうございました。
>>495 読みやすい記事を提供してくださっているので、もう少しだけコメントさせてください。
現状だと、MemoryReAllocateを呼び出す側は関数の成否を確認するために
Mem->Memoryを覚えておく必要がありますので、MemoryReAllocateの引数に
参照渡しを使われるならMemoryReAllocateの戻り値はMomeryではなくて
成否を表すboolなどにされてはいかがでしょうか。
また、reallocは第一引数としてNULLを許容しているので
MemoryReAllocateは入力のMem->MemoryがNULLであっても
Mem->ElementSizeが正しい値であれば正常に動作しますが、
その一方でMemoryAllocateは失敗するとElementSizeがゼロの構造体を
返すので少しアンバランスかなと思いました。
あと、MemoryFreeがboolを返すのであれば、freeの前にNULLチェックを入れて
その結果をMemoryFreeの戻り値としてもいいかなと思いました。
(free関数自体はNULLを渡しても何もしないだけで問題は起こりませんが)
以上お目汚し失礼しました
1回進むごとに
2bitずつに区切って、1の数を各2bitに入れる
4bitずつに区切って、1の数を各4bitに入れる
8bitずつに区切って、1の数を各8bitに入れる
...
となるので
>>489 だと各バイトの1の合計が、各バイトに入る
各バイトなので256バイトのテーブルを使う方法もある
チープなCPUだとこちらの方が速い
逆にリッチなCPUだと数える命令が最初から備わってたりするしベクタ化も可能
Icelake以降だとAVX512VBMIの命令を使って
超高速に64バイト分カウント出来る
>>500 前半
なんか違う
10進数の各桁に関しては
1000a+100b+10c+d
=999a+99b+9c+a+b+c+d
=9(111a+11b+c)+(a+b+c+d)
これを2進数でやると
9のところが1になるからあまり意味がない
分割統治っていうより レジスタ内の桁数を使ってSIMD演算してるって感じ 01020304 + 02040608 2桁ずつの4個の足し算になってるでしょ?
vpsrld vpermb vpermb vpaddb AVX512VBMIを使うと レジスタに値がある状態で 4命令で64バイト分
>>501 >>504 レスありがとうございます。
> 各バイトなので256バイトのテーブルを使う方法もある
確かにある程度のビット幅ごとにテーブルを使って計算する方法は
シンプルですが効果が高そうですね。
> 逆にリッチなCPUだと数える命令が最初から備わってたりするしベクタ化も可能
> 4命令で64バイト分
勉強になります。本当に速さが必要ならCPU自体の理解から始めるべきなんですね。
このあたりのハードウェアの違いは標準ライブラリ関数が吸収してくれると最高なのですがw
>>502 10進数の話の数式どうもありがとうございます!大変勉強になりました。
そうすると、
>>489 の popcount の最後にやっているのは
2進数というか0x100進数で、
0x1000000*a+0x10000f*b+0x100*c+d
=0xffffff*a+0xffff*b+0xff*c+a+b+c+d
=0xff*(0x01010x*a+0x0101*b+c)+(a+b+c+d)
ということになると思うのですがいかがでしょうか。
>>505 の数式が変でした。正しくは以下のとおりです。失礼しました。
0x1000000*a+0x10000*b+0x100*c+d
=0xffffff*a+0xffff*b+0xff*c+a+b+c+d
=0xff*(0x010101x*a+0x0101*b+c)+(a+b+c+d)
最後の % 0xff を見てなかった
なので各バイトの1の個数と勘違いしてました
>>506 はその通り
%は、除算命令を使うと遅いので
コンパイラは
0x0101010101010101
との乗算とシフトに置き換えそうです
PCの64bit環境だとPOPCNT命令がそのまま1命令
Icelake以降だとVPOPCNTQで8個を1命令
で出来ます
x % 0xff よりは x * 0x0101010101010101 >> 56 & 0xff の方が直接的でコンパイラを頼らない記述でしょう
それだと 剰余 x % 0xff ではなくて 商 x / 0xff
>>507-508 レスありがとうございます。
> x % 0xff
> よりは
> x * 0x0101010101010101 >> 56 & 0xff
> の方が直接的でコンパイラを頼らない記述でしょう
コンパイラの最適化によって一行目が三行目に
置き換えられる可能性があるということですか!?
難しそうですがちょっと考えてみたいと思います。
> PCの64bit環境だとPOPCNT命令がそのまま1命令
> Icelake以降だとVPOPCNTQで8個を1命令
本当に速度を求めるならCPUの命令を直接使えということですね。
覚えておきます。
>>511 コンパイラは普通、定数の除算は乗算に置き換えます
乗算、シフトは1クロック、除算は数十クロックかかるのが普通なので
ただ、
>>508 にまでは最適化されないかも
なので
>>508 の方が良いです
>>512 ありがとうございます。そのようにしたいと思います。
ご親切に甘えてしまい申し訳ないのですが、
もう一つ質問させてください。今、
@ = x % 0xff
と
A = x * 0x0101010101010101 >> 56 & 0xff
について考えていたのですが、
x = 0xff のとき、
@ = 0x00, A = 0xffのように、別の値になりませんか?
これは、どこか書き間違いがあるとういことでしょうか。
それとも、この違いは今回の用途では問題にならないということでしょうか。
>>512 立て続けにすみません。。。たった今理解しました。
「この違いは今回の用途では問題にならない」が正解ですね。
除算命令、 Skylakeで最大90クロックだそうで... 簡単な命令だと1クロックで3〜4個実行出来る事を考えると劇遅ですね Icelakeだと18クロックなので 改善されてるみたい
>>515 > 除算命令、
> Skylakeで最大90クロックだそうで...
なんと!しかも、「最大」という表現が付くんですね。
つまり、ただの数値計算なのに
クロックの数がデータに依存する可能があるということ…?
>>516 除算命令の実行時間はデータに依存します
内部的にループしてるようなものなので
SIMDの除算は多分一定
Icelakeももしかしたら一定かもしれません
SIMD乗算も非常に小さな値だと遅い事があったような
>>517 小さい値だと遅い!?
すみません、ハードウェアの知識がなさすぎて
タイプミスをされたのか本当にそうなのかの判断すらつかないです。。。
そりゃ並列処理できるような相互依存性の低い大量のデータでもあるならともかく 小さなデータ塊対象だとパック化やアンパック化する手間が掛かる分だけ 総合的にはSIMD使った方が遅くなるだろ 馬鹿となんとかは使いようと言うだろ
>>520 馬鹿がSIMD使うと遅くなる
それはそうかも
>>519 勉強になります。 非正規化数という言葉はちらっと聞いたことはありますが、こういうデメリットもあるんですね。 そして、それでも非正規化数を使うのは 「浮動小数点数の加減算は決して『アンダーフローによるゼロ』にならない」 という理由があるのだということも初めて知り、とても興味深く感じました。 ところで、ビット演算に関してもう一つ相談させていただいてもよろしいでしょうか。 動的メモリ再確保のコストを減らすために確保するメモリのサイズを必ず 2ⁿ-1 の形にしたくて、 与えられた数を下回らない最小の 2ⁿ-1 の値の値を返すような関数を作って使っています。 つまり引数xを2進数で表したときの一番上位の1以下をすべて1に置き換えるような関数で、 具体的には以下のように記述しています。 int fill_lower_bits(int x) { x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return x; } この関数は割と使用頻度が高いので、PCの64bit環境にPOPCNT命令があるように、 もしfill_lower_bitsと似た振る舞いをする命令があれば名前を教えていただけないでしょうか。 (続く) (続き) また、こちらはあまり使い道は思いつきませんが、 int fill_higher_bits(int x) { x |= x << 1; x |= x << 2; x |= x << 4; x |= x << 8; x |= x << 16; return x; } という関数を考えることもできて、これなら int fill_higher_bits(int x) { return -(x & -x); } のように簡単な書き方に変更できます。 fill_lower_bitsについてもこういうテクニックがあればいいなと思っているのですが、 もし何かご存知であれば教えていただけると嬉しいです。
>>523 BSR命令といくつかの命令を組み合わせて出来ます
Cからだと _BitScanReverse64
>>524 x | -x
の方が良いと思います
>>525 何度も本当にどうもありがとうございます。大変勉強になります。
> _BitScanReverse64
こんな命令があったとは!
この名前で検索したら、今まで知らなかった興味深いページがたくさんヒットしました。
ReverseじゃなくてForwardというのもあるみたいですが、
Forwardの方はマイナスを使う方法でも十分高速になりそうなので、
どちらが速いか検証してみようと思います。
> x | -x
確かに…。
ド・モルガンの法則で ~(x & ~x) が ~x & x に書き換えられるのはすぐに分かるのですが、
もしかしてそれと同じことがマイナスでもできるのでしょうか。
-x が ~x + 1 と同じになることは理解しているので、ちょっと考えてみたいと思います。
>>526 > ド・モルガンの法則
-(a & b) = -a | -b が成り立つかなと期待したのですが、
a = 0, b = 1 のときにつまずいてしまいました。
でも、
>>525 に書いていただいた -(x & -x) = -x | x は間違いなさそうです。
こういう式の変形って、どこかテキストに載っていたりするのでしょうか。
自分で頑張って探すんです ~x x-1 -x & | ^ これらを組み合わせれば 一番右のビット関連がいろいろと出来ます ???10000 に対して 11110000 11100000 00010000 00011111 00001111 これらを得る最小回数の演算を考えてみてください
ド・モルガンと似た問題で、 「君たち2人は注意されないならば、君たち2人は私語を止めない」 の対偶、 「君たち2人が私語を止めるならば、君たち2人は注意される」 って矛盾にちょっと考えてしまったわ。
>>523 メモリ確保やアクセスの時間に比べれば
サイズ計算の時間は無視出来る
ビット演算の趣味として楽しむ分には良いけど
普通にループでもパフォーマンスは変わらない
パフォーマンスが重要じゃないところ
(つまりほとんどの部分)は
移植性、見やすさ、工数、...
などが優先される
ということは知っておいた方が良いですね
分野によってはループや比較による分岐は遅すぎて使えないなんてことままあるよ
動的メモリ再確保 のサイズ計算の話 オーダーnに対して係数の小さなオーダーlog nは無視して良い って話
C言語というか、WindowsのCですが、 たとえば strcpyの lstrcpyと _tcscpyの違いは何なのでしょうか 前者は WindowsAPI、後者は VC++CRTという説明を見たのですがよくわからないのです 両者とも UNICODE(後者は_UNICODE) の有無で charとwchar_tを切り替えるようですが、どちらをどんな時に使用するのかが分かりません。
crtへの依存を減らせる分、常にlstrcpyを使えばいいと思うよ。lstrcpyは不正アクセスしたときに例外投げてくれるみたいだし。 自分なら依存減らす&安全性のためにstrncpyとwcsncpyを選ぶけど
>>540 ありがとうございます。
539です。
今後は気をつけようと思いますが、過去に書いたコードは何ともいたし難く…orz
なぜ先に lstrcpyを見つけなかった 2014年のオレ…
でも、内容が古いのかもしれませんが、ある記事によると CRTの依存を断ち切るのも容易ではないようで。。。
むしろlstrcpyなんて16bit時代から引きずってる過去の遺物なんじゃ? 今はlstrcpyも非推奨、代替のStringCchCopyはWindowsAPIの体だけどkernel32.dll等を呼び出すのではなくstrsafe.h内にコードが書いてある変わり種なのでtchar.h系の_tcscpy_sでよくね?っていう
そうか? 古くからMSCは「高いが安心」というポジションだったが
何の変哲の無いコードを書いてコンパイラのバグが顕在化するMicrosoftのCが安心とは、茶がヘソを沸かす。
唯一のECMA-372対応コンパイラ 壮大なマッチポンプだが…
そもそもCはUNIXの為に作られた言語だから UNIX系以外のOSで使うと齟齬が出るよね
それはテキストファイルのコードの違いというだけであって言語の仕様そのものとは直接関係ない
OSを記述しやすく意図されて言語という認識だが UNIXに絞って特化された部分って何だろう?
テキストファイルといえば 歴史上どっかの段階で文字列操作や汎用IO関数を捨て専用のもちっと使いやすい内蔵スクリプト言語に任せ どうしても処理速度を求めるマは自作、非標準ライブラリで配列イジクール形にしたらよかったのにね システムコールの頻度とか毎度読み解く指定子とかで標準ライブラリも爆速ってほどじゃないしー printfのうじゃうじゃ増える非互換指定子とか似た使い分け迷う関数の増殖とかを防げたろうに
せっかくライブラリとして言語の外に出てるのに、 なんでスクリプト言語なんか内蔵しなきゃいかんの。
>>552 creat()のモード指定が8進数で書ける
>>555-556 それはライブラリの問題ではないか。言語仕様とはちょいと違う気がする
まあ「標準ライブラリは言語仕様(キリッ」と言いきっちゃってもいい気もする
たしかにunix系以外で8進数って使わないような気もする。
Cは文字列をヌル終端するのが「ほぼ」前提になってるよね。 もしそれ以外の文字列表現を使うつもりだったら、 文字列専用の型を用意していたし、ポインタより配列を重視していたはず。
>>557 おまいがOSに特化したとか言い出したんじゃないのか
>>557 違う、8進数で書けると言う「言語仕様」の話
>>561 8進数でも書けちゃう
というだけで、建前としては「ちゃんと定数使え」じゃない?
言語仕様でUnix文化に特化してるところって
mainとreturnの仕様くらいじゃない?
>>562 8進数で書くのがchmod互換で直感的なんだべ
>>562 > 建前としては「ちゃんと定数使え」じゃない?
建前はともかく0777とか0755とかバンバン書かれてるし…
とまで書いてなんだけど、ちょっとググったらどうも8進数はC言語発祥じゃなくてB言語でも使えたみたいw
PDPシリーズは触ったことないからよくわからんけどHPのミニコンは命令コードが3bit単位に区切られて表記されてた
ブートローダーは手入力してて16個並んでるスイッチでアドレスや命令コードをセットするんだけど見ての通り3bit単位に区切ってある
もう記憶があやふやだけどアセンブラとかも8進表記ができたような気がする
多分PDPも似たような感じだったんじゃないかと思う
なので8進数云々はあまり関係なかったわ、すまん
ソースの見栄えを気にして桁そろえに スペース使わずに 0 を補うんですね
やったことあるヤツいるよな? いやそうじゃなくて ただの0
017は頭に0があるから、C/C++では8進数として扱う。ただのゼロもリテラルの分類としては8進数。
(6.4.4.1) octal-constant: 0 octal-constant octal-digit まじか でも8進だからなんだっていう
16歳の僕でも酒が飲めるぞ。 飲める飲める飲めるぞ酒が飲めるぞ。
012 月はハロウィンで酒が飲めるぞ 飲める飲める飲めるぞ酒が飲めるぞ
int main() { return 0; } 8進数ですほんとうにありがとうございました
すんごく欲しいならプリプロセッサでも作ればいいんじゃね?
>>586 プリプロセッサで10進数にするの?
それじゃ何の為の16進リテラルかわからない
いずれ対応するから待つのみ
プリプロセッサ作って言語を拡張とか、昔はけっこうあったけどな。
昔は結構あったはずのものが、今は残ってないのだろう
まあそれほど必要がないなら別にいいんじゃね。 IDEしか使わないならそういうことはやりづらいだろうし。
誤差を無くす為の16進小数リテラルなのに プリプロセッサで10進数に直すの?
ビットパターンを直接作って変数のアドレスに放り込むようにできないのかな。 それじゃリテラルじゃなくなっちゃうか。
>>584 C++17に既にあるから、いずれ使えるようになりそう
>>585 普通に10進で書いた浮動小数点数とまったく同じ扱いなので心配無用
>>592 10進でDBL_DECIMAL_DIG桁あれば、元の値を再現できるはず(doubleの場合)
>>583 C++14で0b使えるようになって
もう5年も経っているんだが
>>593 floatやdoubleとcharのunionにするやつか
float や double のビットパターンが IEEE754 前提でごりごりっと…
C言語に欲しい機能は、関数オーバーライドとユニファイドコールシンタックス。 3つあったけど一個忘れた。 参照もいいな。 そんなアマチュアC++書きです。
>>602 inline と指定すればなにがあろうと inline に固執する執念深いコンパイラはありませんか?
inlineを忠実に守ってたら 指数関数的にコードサイズが増える
>>605 それはコンパイラが判断することではなく、人間様が判断することなのでは?気分次第で inline にならない inline 指定なんて何の役にもたたないと思います
ループ展開して中のinline関数をぶちまけたら・・・ 命令の並べ替えで案外コンパクトに成るかもしれんし 指数は言い過ぎだと思うがね
それまた非標準の__forceinlineというキーワード使えばインライン化を強制できる。
>>599 名前空間オヌヌメ。
って言うか、なぜ急に自己紹介なんだろ?
ついうっかり再帰する関数を inline にしてし(ry
>>607 2箇所でコールする関数がn段ネストで2^n
真の無限ループは作れない。 コンピュータは何れ壊れるし停電になったら終わりだからな。
真の無限ループを現実的に実行することができない≒無限を観測することはできない 概念としては作れる
goto は技を極めた者だけが使うことが許される。半端な者が手を出せばおかしなことにしかならない。
>>623 用法用量を守って正しくお使いください。
gotoのなにがいけないのかを知らない者は スペルがジーオーティーオーでないgotoを平気で使いながら 頓珍漢な教条主義を得意げにぬかす
>>628 > スペルがジーオーティーオーでないgoto
wakaran
> goto文は危険なんですか?
ああ、とてつもなく危険だよ
こんなことを聞くような
>>623 にとってはな
>>629 ISO/IEC 9899:2018 6.8.6 Jump statements
>>631 goto文以外のジャンプ・ステートメントとハナから書きなされ。
というか、goto文を乱用せずcontinue、break等で代用しなさいという教条だべ。
ジーオーティーオーでないgotoを平気で使うのは教条に反しないので、「ながら」と矛盾を指摘する言い方はおかしい。
>>632 そんなにダイクストラらの主張の論点が何かが分かってないのを誇張して何がしたい?
いやー、上方へのジャンプを抑制するだけで結構切れますよ?
L: hogehoge(); if(huga)gotoL2; if(hage)goto L; L2:
キーコンビネーション間違えて投稿してしまった。
>>638 のようなコードは完全にスパゲッティなのでやめましょう。
do{ continue; }while(); while型goto教の教義のコード。
制御構造のパターンとして何型のものが望ましくないのか、お前ら本当に聞いたこともないの?
安易な無限ループで悲惨なオチに出会う人減ってるかいな?
アホばっかりと諦めるのはまだ早いと思う 短気を起こさずにもうしばらく待ってみる
>>643 あり
むしろ使わないと階層が深くなったり、フラグを多用したりで余計おかしなことに
bool型の変数をprintf関数内でプレースホルダ%dを使って表示すると、 1や0になってしまうのですが、trueやfalseの形式で表示できないでしょうか?
printf("%s", (b ? "true" : "false"));
%sでboolVar ? "true": "false"とでもすればいい Cにboolはないよ
>>649 どアホ
ISO/IEC9899:2011 7.18
2 The macro
bool
expands to _Bool.
C99を (標準の)C と呼んでも差し支えないのだろうか
最新の規格が標準だぞ C99が定められたのは既に20年前 太古の企画と言っても差し支えないレベル
答えてくれた方ありがとうございました 面倒なんですね
>>653 決めているのはISOで
652が勝手に決めているわけではない
現行規格すなわち標準はISO/IEC9899:2018、通称C17だ
https://www.iso.org/standard/74528.html https://ja.m.wikipedia.org/wiki/ANSI_C ANSI C、ISO C、または標準Cとは、米国規格協会(ANSI) および国際標準化機構(ISO) が発行したC言語の標準の総称である。歴史的にこれらの名前は特に、オリジナルであり、最もサポートされているバージョンであるC89およびC90のことを指す。
C99 later の C++ 非互換部分は、どうでもいいとおもいますね C++ にあわせて欲しかったのですが、独自色を強めてしまったのは疑問手です
現実問題でもC89オンリーのコンパイラはかなり減ってきてるだろうが Cライクな非標準全開のコンパイラなら今でもあるが
普及率を根拠にするなら
>>652 を取り消してからにしてもらおうか
>>647 の質問への直接の答えじゃないけど、
bool(実体は_Bool)型って汎整数拡張の対象だっけ?
拡張されるならprintfの中では引数がbool値だったか整数値だったか、
もう区別がつかないんじゃないか。
区別できなきゃ 0/1 で表示すべきか false/true で表示すべきかも
決められないと思うんだけど。
>>660 たとえ652をボコボコにやっつけたところで
現実は何一つ覆りはせんぞ
無駄な抵抗はやめろ
可変個引数の整数値が char でも short でも int になるのは 「汎整数拡張」とは違う動作、別の用語だったかも知れん。 言語に詳しい人の指摘をお願いしたい。
https://ja.wikipedia.org/wiki/C99 >GCC、Clang、Intel C++ Compiler 等はC99の新機能の大半をサポートしている。
>ただし、GCCは、ほとんど準拠しているが、規格への100%完全準拠は果たしてい
>ない。GCC 4.x までのデフォルトは C89 に GNU 拡張を加えた -std=gnu89、
>Clang のデフォルトは C99 に GNU 拡張を加えた -std=gnu99 である。GCC 5.0
>から C11 に GNU 拡張を加えた -std=gnu11 がデフォルトになる。
>Microsoft Visual C++ は 2013 から C99 の大半を実装した。ただし、tgmath.h
>や snprintf() などが未実装。
>Open Watcom C compiler は標準のうち最もよく使われている部分を実装している。
>かつては、ドキュメント化されていないコマンドラインスイッチを指定しないと
>有効化されなかった。2010年現在の最新版である 1.9 では -za99 オプションを
>付けることで有効化される旨、明記されている。
>Sun Studioは、サン・マイクロシステムズによればC99を完全にサポートしている。
主なコンパイラは大体対応している様だが、まだ完全ではないみたいだ。
GCCだと独自拡張もあるのでややこしそう。すでにC11に向かっているし。
今時Cを使うのって そういうメジャー所じゃなくて 小規模マイコン用の独自コンパイラがメインでは? そうでもない?
メジャーなところで旗色が悪くなったからって マイナーなところへ逃げ込む気か 相手すんの馬鹿らしくなるぜ
規格を捏ねくりまわして喜んでいるのは言語マニアだけだしな 実際の現場は殆どが独自コンパイラ
捏ねくりまわすって、工業製品を使って工業製品を産み出すのに 規格票を確認するのは工業人の当たり前の日常だろうがよ
必要なのは規格よりもコンパイラ製造元のマニュアルだ 規格は実際の動作を保証してはくれない
コンパイラのマニュアルも必要だが 規格「よりも」という変なバイアスは無用 「と」だろうが
テンプレに入れた方がいいな 特に断りがない限りはC89/C90が前提だって
100歩譲ってC99 C17やC20限定の話題は他にスレを立ててそっちでやって
老害でない人たちは、C99スレでも立ててそこに移動で
bool 型があったとしても、 printf の引数(... で受ける) に渡すタイミングで暗黙に数値化しちゃうんじゃないかな? C++での引数型により別のものが呼ばれる機構は期待できない部分
>>674 それは名案ですね、正直言って C89=K&R2 で必要かつ十分ですし、C99 になって追加されたことといえば C++ と均整のとれない糞仕様が多くて役に立つものは一つか二つか…
>>663 たしかに規格ISO/IEC9899:1999 のどこにあるか?というと、ちょっとみつからないですね
default argument promotion とはいうみたいですが
これは char, short -> int
float -> double
だったかと
>>675 ジジイ、ジジイか…
それじゃお前はなんだ、この餓鬼が
おれはお前さんがこの世に落っこって来る前からバグつくってんだ
>>682 ジュニア専用お子ちゃまC言語は他所でおねがいします
gotoの何がいけないか説明できるやつ、ここまでゼロ
年取ると新しいことが覚えられないのは理解するよ。 だからって30年前の規格で縛るとかどんだけおつむ弱いんだよ
30年経ってもまだ対応完了しないコンパイラがある件
そらあるだろうさ。だからスレも底辺コンパイラに合わせろとか頭腐ってるんじゃねーの?
上級国民用のC言語スレを建てて,そちらに移った方が良いのでは?w
>>685 C++ でコンパイルできない C なんて何の役に立つのか疑問だ、といっているのですよ
>>691 じゃあC++使えばいい
C++コンパイラでC非互換の機能を使わない縛りこそ
何の役にも立ちゃしねえ
それをやるやつも役立たず
ほんそれ C++を覚えてさっさとこのスレからいなくなってくれ ガキんちょは
>>691 公開ヘッダだけ互換で書いとけばいいだろマヌケ
C言語環境には色々と障害が多いが その最たるものの一つが老害の多さだとこのスレを見てもよく分かる
そもそもC89とC17の違いがそんなに問題になるか? C89さえ分かっていればC17を差分で憶えるのは大した話じゃない 不勉強なやつが自己弁護のために騒いでるだけだろうが
勉強家はC++に移られたらどうか 貴重な人生を無駄にしないで済む
もちC++も使ってるよ C使いが他の言語をやってないという仮定がそもそもおかしいぜ
勉強家はこのスレに入らないから,さっさと移動したらどうか? 粗大ゴミしかいないスレなんだから,こんな所に居続ける必要ないだろ お前自身が粗大ゴミだと自覚しているなら仕方がないが
うるせえな どこのスレに来ようが貴様に口だしされる筋合いはない
特定の話題で話したいなら,そういうスレを見つけるか、無ければ作れば良いんだよ C言語全般を話題にする既存のスレを荒らす必要がこれっぽっちもない
そもそも
> 粗大ゴミしかいないスレなんだから
なんて言ってる
>>701 が荒しだろ
元々は質問スレだぞ
>>705 C言語全般を話題にするスレと言ってる奴がC99は別スレに行けとか言ってたのだから、支離滅裂ダナー
C言語は 非常にチープな環境でも動く 低レベルな記述が可能 非常に多くの環境で動作する コンパイラの作成が容易 ということで未だに多くの場所で使われている これらのメリットを減らす拡張は不要 これらのメリットが不要な環境ではC言語は不要 C++や、よりリッチな言語を使うべき
>>693 >C++コンパイラでC非互換の機能を使わない縛りこそ何の役にも立ちゃしねえ
K&R2 の範囲で書くことができるというのは必須の技能だと思いますよ、それができない、そもそもなにが K&R2 の範囲でなにがそうではないかを知らないようでは馬鹿と謗られてもしかたがない
>>698 >C89さえ分かっていればC17を差分で憶えるのは大した話じゃない
そのとおり
できる奴にとっては、C99 だろうが C11 だろうが C17 だろうが、どれも大差がなく自由に行き来できるしどうでもいい
しかし、ここで敢えて「C89=K&R2 こそ正義」と煽ってみると、案外「老害死ね」という反応が続出する
そういう点から推察するところでは、このスレに出入りする人間の 50% は K&R2 すらわかっていないレベルではないだろうか、と考えさせられるのですよ
>>708 ライブラリとして、他の言語から直に呼んで貰うことを目指すため、C で書き直してしまうという話もよく聞きます、この手の用途を他の言語で聞いたことがない
>>692 我々がしているのはヌルポインタの話だ
ただ 0 と書けば済む話のものに誰がタイプ数をつぎ込む?
まして #define NULL (void *)0 と構えて運用するようなものじゃない
マクロ NULL が存在すること自体なにかの間違いなのだ
>>710 K&R2の範囲で書くという具体的な案件を1つでも知っているか?
俺も含め、その案件に携わることになったとして困る者は極めて少数だと思うぜ
50%もいるようには全く思わない
K&R1の案件でさえ、今の若いのでもすぐ慣れるだろうさ
>>715 そうですか
そのわりには、「老害死ね」という反応がかまびすしいですね
>>714 整数とポインタのサイズが違うとき、NULLがないと大変なことになる。
>>717 可変長引数関数に (void *)0 を渡すときだけは (void *)0 は必要ですが、それ以外は 0 と書いてそれがポインタか整数かは文脈で判定できると思っています
>>717 ん?可変長引数とか、整数とポインタが曖昧なところでは NULL にもキャスト要るし、
NULL がサイズ違いとか動作上の問題を解決することなんてないのでは?
http://www.kouno.jp/home/c_faq/c5.html#4 > ただ 0 と書けば済む話のものに誰がタイプ数をつぎ込む? というわけで if(x != 0) じゃなくて if(x) だな
プロジェクトリーダー「数字直接記入禁止!全部#define で置き換えろ!」 大昔そんな事があったと聞いた。
あった フラグを一個も立って無いことを示す0もdefine デバイスの特性を多項式近似した関数も 各係数を全てdefine 縦と横のそれぞれの座標計算、ループで処理にした方が記述が簡単なので2でループしたら その2もdefine 他にも意味不明のコーディング規約が多数
それもこれもマジックナンバーにコメント書かなかったおまいらが悪いんやで
マジックナンバーの何がいけない、どういう場合にどんな問題があるかを理解しないまま、杓子定規にルールだけ覚えるとそんな奴が出来上がるな。
>>721 > プロジェクトリーダー「数字直接記入禁止!全部#define で置き換えろ!」
良いと思うよ!!
値まで書いたアホっぽい定数 はわりと使うかな・・・ #define EGGCOUNT30 30 みたいに書いちゃうやつ コード中に即値書きたいけど書くとリファクタリングで死ぬから リファクタリングのためだけに定数書いてる感じ
当たり前だがリファクタリング以前に定数調整だけで死ぬぞ #define EGGCOUNT 30 なら #define EGGCOUNT 40 で済むのに #define EGGCOUNT30 30 だと #define EGGCOUNT40 40 で全置換する気か
s/30/40/g は基地外沙汰だが s/EGGCOUNT30/EGGCOUNT40/g ならイケそうかも!!
フォーマット文字列中のも駄目なんかな 少数以下 3桁に整えるのに "%.3f" → "%.*f" にして引数で渡す
ああ フォーマット文字列を define しろということか #define FORMAT "%.3f" : sprintf(buf, FROMAT, double_value); みたいな
>>727 数値一通りdefineして
NUM_56
みたいに数値のかわりに使う
糞コーディング規約の典型
そういう環境だと
大抵defineの数値を変えるだけじゃまともに動かない
>>730 文字列リテラルをコード中に記述禁止
その為itoaみたいなのを組み合わせたコードが出来る
>>727 そのとおり、全置換をする前提なんよ
置換するのはIDEのお仕事だから漏れは無いと信頼してるし、なにより
ソース改変による影響範囲の割り出しとテストしなおしの強制を兼ねてる
エディタの正規表現は使わないのか? 複数パターンでも一回で出来ると思うが
>>720 MISRA-C の違反!
if(条件式) には、実質的なbool 値のみを書く!
ただし、if( x ) で、x がbool変数なら、OK
x != 0 は、yes/no の2値しかないでしょ? 実質的には、bool 値として使っている
それはおまえの思い込み 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. これが事実だ
直接コードを書くことを禁止する。スクリプトを使って書け。
BOOL YESNO OKCANCEL ONEBIT 実質的にboolなら中身はdoubleでもenumでもint64_tでもifに入れて良い っていうコーディング規約
文法は関係ない。 あくまでも、コードの品質・可読性を上げるための、MISRA-C のルール! if, while などの条件式には、実質的なbool 値しか書けない 条件式に、単なる整数などを書けない。 整数の0 を偽とみなした、条件判断を書けない MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
>>741 よそのスレでRuby基地外っぷりを発揮してさんざん迷惑を掛けているお前がルール遵守を説くなんて、羞恥心はないのか?
まともなルールと仮定した場合
>>735 がダメなら
>>743 >>744 もダメだろうな
>>741 また MISRA ですか…
MISRA 適合かどうかを診断してくれるプログラムでも配布してくれているんだと思っていましたが、そうではなく、ただ人を縛る規則を決めるのが好きな人間の集団なんですね…
> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか? もう罵倒語が喉まで出かかっているんだが
違うナァ MISRA語ルールを守っているとMISRA語のコンパイラが書けないんだよw 大いなる自己矛盾に陥ってMISRAは沈没する
>>726 みたいなのはいくつか特定の値しかとれない引数のために使われることはあるね。
まぁenumでもいいんだけど。
>>747 >> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
これを読んで
> MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
と解釈する奴はもれなくバカ
>>750 違うんなら弁明しろよ
それができないだろうという予想で、罵倒語が喉まで出かかっている
>>751 マジでバカなのか?w
AならBである
から
AでないならBでない
(当たり前だが真ではない)
って書けばお前のアホさが理解できるかな?
これでわからないなら中学の数学からやり直せ
main関数の{ }についてお聞きしたいんですが、 int main(void) { ____/* コード */ } という表記ではいけないですか? スッキリCや各種サイトを見ると、 int main(void) { ____/* コード */ } となっていることがほとんどなのですが
間を取って int main(void) { /* コード */ } でも動くぞ
ありがとうございます。 後者にしないといけないという決まりとかあるんですか?
文法じゃなくてコーディングスタイルのこと聞いてるんでしょ。 チーム内で決まったスタイルがあるならそれに従えばいいし、 そうでなければ自分の好みで決めればいい。 俺の好みは1行減るし統一感のある前者。
もう少し考えてみようと思います 深夜にありがとうございました
>>752 では、741は何を主張したかったんだ?
> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
わざわざ、こんな戯れ言をぬかした意図を説明しろ
>>764 それは741に聞けや
俺はお前のバカさを指摘しただけ
>>756 if (...) {
while (...) {
do {
なのに、
main()
{
という矛盾はよく見かけるが
そうなっている案件で秩序を乱すことはしない
>>765 741本人のくせに自分の言葉から逃げてんなよ
まあ、あれじゃ逃げたくなるのはわかるがw
>>756 int func(int arg)
{
...
}
という具合に「関数本体を開始する波括弧を次の行に書く」方式だと
ヘッダファイルにプロトタイプ宣言として書き写す際に
1行コピーして行末に ; 追加で完了、楽チンという利点があるわね。
main() の場合は当てはまらないのがやや弱いけど。
>>767 自分のバカさを認められずに自演認定でごまかすのに必死かよw
哀れな奴
>>769 MISRAの話しなくなってやんのw
技術板で技術的な話ができないやつはゴミ以下だぜ
>>770 > 技術板で技術的な話ができないやつはゴミ以下だぜ
中学校の数学すら理解してない奴が何言ってるんだかw
>>771 いや理解してるよ
そうでなきゃ年収8桁はできねえ
こんなところで年収自慢なんかしても虚しいだけじゃないか? 対偶を勘違いしてるなんてみんな気付いてるのに無理につっかかんなって
>>766 power(x, n)
int x, n;
{
....
}
MISRAで if(x)がまずい理由を教えてくだされ
>>731 一般的に特定の非正規形は特定の分析用途には使いやすくても
違う観点で分析しようとすると正規形からデータ変形するよりも多くの手間がかかる
参照オンリーの場合でもデータの利用方法が定型化していない場合は正規形から考えるメリットは大きい
特にRDBで分析用途のDBを用意する場合は参照オンリーでも正規形から考えとかないと手間が異常に増える
>>752 高品質で、審査に通っていれば、MISRA-Cを守っている
やっぱり違うなω
元の命題からして可笑しいωωω
元の命題の真偽ではなく元の命題を真と仮定した場合、対偶は真か?という話 本来、対偶は真であるが747は対偶ではない命題を挙げてそれが真であるかのようにレスしているので突っ込まれた 対偶の挙げ方の間違いを指摘したのになぜか元の命題の真偽についてギャーギャー言うから話が噛み合わない
>>773 みんな気付いているのは、わざと言っていることだよ
鬼の首でも取ったように得意がってるのがおまえだけ
中学の数学がやっとわかるのか、すごいなあw
いきなり年収自慢とか笑える まあ低能にありがちな行動だけどなw
中卒でも中には総理大臣になった人もいるけどね そういうことにしといてやろうか?
そもそも集合関係と因果関係を混同しているのが間違いの原因 「事象Aが真ならば事象Bは真」の対偶「事象Bが真でないならば事象Aは真ではない」は常に正しい 一方「原因Aが真ならば結果Bは真」に対して「結果Bが真でないならば原因Aは真ではない」は正しいとは限らない
>>774 K&R1の時代には改行後に { を書くしかないが、
いまどき持ち出して混乱させるのはやめろ
>>782 おまえ747の時点で俺がそう言っているのが読めてないもんな
そうやって教科書を朗読するのもいいことだから頑張んなw
お勉強はまず憶えることが初手だが
現実問題に応用できるようになって始めて完成するんだよ
>>783 774は制御文と関数は違うということが766の言う「矛盾」のルーツだと言いたいんだと思うぜ
>>747 は「事象Aが真でないならば事象Bは真ではない」
集合論で言えば「対偶」ではなくて「裏」の関係
「裏」の「逆」または「逆」の「裏」が「対偶」 ある命題とその待遇が等しいのはそれぞれの事象に因果関係が存在しない場合に限る
MISRAの肩を持とうとしてしくじったトンマなやつに どんな気持ちか聞いてみたのさ
741本人以外がこんなに激怒するわけねえしな なあトンマ、今どんな気持ち?
対偶と裏の区別もつかずに年収8桁とか学歴とか低能にありがちなレス連発やんw こんなわかりやすい奴久々に見たわ
>>794 あなたのほうが滑っていますよ…
そもそも MISRA 推しな時点でこのスレの住人から疑問の声が挙がっているのに、まだそれに気づかないの?
末期ですね
いくらMISRA推しガーとか言っても
>>747 がバカなのは変わらないんだがw
トヨタの車が暴走した問題で、米国議会でも言ってただろ トヨタは、MISRA-C で、10点ぐらいしか取れてないってw 100ルール中、90に違反してる 守ってない企業があるから、人命を預かる、ロケット・医療系組み込みなどでは、 特に厳しい資格が必要だと議論になってる 組み込みでは、バグで簡単に、人が死ぬから だから、何十年も研究してる、Elixir みたいな関数型を使う
プログラムを書くのに●●は駄目だとか使いにくくなるほど制限かけてもさぁ 書きたい事に必要な関数とか書き方とか知らないようなのに投げてるだけなので脆弱性になるようなバグは出てくるし意味がない むしろ知ってるような人にとっては制限になって害でしかない
JavaScript で言えば、TypeScript, ESLint とか 違反を警告してくれる、lint ツール
>>740 > 実質的にboolなら中身はdoubleでもenumでもint64_tでもifに入れて良い
っていうコーディング規約
-0.0は ?
>>799 御意
無能のために無能に合わせろと無能がわめく
自己虫以外の何ものでもない
MISRAってむしろ
>>799 ,
>>802 みたいな自称上級者がやらかすのを防止するためのものなんだけどなw
もうめんどくさいからMISRA押しのRuby君が害悪ということでいいのではなかろうか?
>>798 トヨタなんて下請け丸投げでソース読めなくてレビューもしてくれなくてテスト仕様書も丸投げで無駄なエビデンスばかり要求してる
10点ぐらいしか取れてないのは下請けなんだけどそれを指摘もできない
>>803 上級者なんて称号は俺はもちろん客先の誰も使ってねえぜ
仕事がもらえる、それだけだ
わかるかい? 無職君w
ちょっと年収の話したらあんなに発狂すると思わなかった よっぽどコンプレックスらしいな、おーこわ
作業は指示するが仕事は教えないクソ野郎が増えたから この先の見通しが暗い。
「自称」上級者の意味すら理解できない
>>806 だめなのは数学だけかと思ったら国語も壊滅的だなw
>>800 そういうものを MISRA 対応として lint ツールとして無償公開するのが筋というものでしょうね
例外項目を設けてスコアで評価するにしても、事前に自動評価できるツールがあるといいですわね
スコアとか意味ねえ 違反箇所は違反箇所で数の問題じゃねえ 違反プログラムは遠さねえとぬかすなら絶対に通すな その結果に責任を持て
>>803 が仕事を出している側である可能性を考慮できない
>>806 >>815 そこにしか突っ込むことが出来ないのですか?みじめですね…
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006 この研究会は、トヨタなど大企業から、数十人のベテが集まって、 欧州人に聞きながら、作った本。 未だに、コーディングルールのバイブルだろ 元々は、Andrew Koenig の本 C Traps and Pitfalls, 1988, c1989 Cプログラミングの落とし穴 この本から、Lint が始まったのじゃないか?
>>818 別に他のところに興味ないし
まあこんな初歩的なところに突っ込まれるとそりゃ困るわなw
だからROMってりゃいいと思うんだけどな
>>819 > この本から、Lint が始まったのじゃないか?
流石にもう少し時代を見てからレスした方がいいぞ…
そっかー組み込み屋さんはUNIXの歴史とか知らなかったりするのか
>>819 >この本から、Lint が始まったのじゃないか?
違います
初期の lint はベル研の V7 と同時、1979 にはリリースされています
K&R1 は特に引数まわりはスキのある仕様でしたので細かくチェックをいれる lint は必要であったのも理解できます、これは K&R2 になってかなり改善されました
それに最近のコンパイラは lint に似た warning も出せるようになったし
はじめてのOSコードリーディング UNIX V6で学ぶカーネルのしくみ、青柳 隆宏、2013 そう言えば昔、こういう本も読んだ
ジャンケンのコードを書いてみました
よろしければ、ご指摘等をお願いします
https://pastebin.com/HCLJ5m7p >>823 > それに最近のコンパイラは lint に似た warning も出せるようになったし
初期のlint使ったことないだろw
>>815 俺に言わせれば、おまえ文系くせえんだよ
俺はハード設計もやるから負論理だのド・モルガンだのは息をするくらい当たり前なことで
待遇だの裏だのという用語で得意がるやつは専門分野は何だろうと思ってしまうのさ
それから突っ込まれてるのはおまえだぞ、741本人よ
待遇で得意がるvsドモルガンで得意がる 小学生同士かよ
>>829 対偶の話に負論理とかド・モルガン?
恥の上塗りか?
あと741に突っ込んでるのは頓珍漢なお前だけだぞw
電子回路・HDL などの組み込みでは、 AND, OR, NOT, NAND,NOR などの回路、 負論理、ド・モルガン、カルノー図とか、初歩だぞw まず、情報処理の組み込みの教科書を読め!
>>831 負論理とかドモルガン知ってる人が対偶の意味知らないと思ってるの?
このスレっていつも下らない喧嘩を延々と続けてる奴らがいるけど、何なんだろう。どっちが正しいとか以前に言ってる中身(議論の仕方)が下らなくて他人からはどっちもバカにしか見えないから消えてくれないか。
>>827 Sun OS 4.1 のはやったことがありますが、初期の頃とは変わっていたのかも
>>836 彼は分かってない
2回も指摘されてるのに論理が破綻していることに気付いてない
>>747 ,750,751,752
>>782 ,784,786
>>836 さあどうだろうね、「ド・モルガンの定理知ってる」なら「待遇を理解してる」という命題が証明されたとか聞いたことないし
そもそもド・モルガン知ってるとか言うのも
>>829 が言ってるだけだし、
>>747 が対偶でない事を知ってるのかすら怪しいしなw
読んでないから知らんけどこんな雑談に対偶ガーとか論理ガーとか証明ガーってのは馬鹿馬鹿しいね。
似て非なるもの ド・モルガン A ∩ B = ¬(¬A ∪ ¬B) A ∪ B = ¬(¬A ∩ ¬B) 対偶 A ⇒ B = ¬(¬B ⇒ ¬A)
正直、アスペ馬鹿が下らないことを追求したがってるだけにしか見えない
コピペ改変してから何か変だと思い直してみれば正解はこうだったすまん 対偶 A ⇒ B = ¬B ⇒ ¬A
>>826 いえ、typedefの文はスッキリCを参考にしましたが、
あとのアルゴリズムはオリジナルです
こんなところで意見を求めるのは図々しいと分かってはいますが、
何とかお願いします
C言語のBNFって何種類あるの? 知ってるだけ全部教えて
>>842 うん、俺もそう思うよ
>>747 が裏も正しいと思い込んでるバカってだけの話だしw
>>844 何を追求してると思うの?
追求すべき事柄なんて特にないと思うけど
>>848 https://cs.wmich.edu/ ~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm
BNFで思い出したが enum { a } func(void) { return a; } この文法使い道ないよな
>>714 エイリアスの否定とはいただけない
直値だけの糞コードはゴメンだわ
意味によって0とNULLは書き分けるよ
>>855 その書き分けに意味はあるのでしょうか?
>>856 お前にとっては意味がない。
俺や俺以外の書き分けたい人には意味がある。
それだけだから気にしなくていいぞ。
やたら長いコードの中で it = &a; *a = 0; it = 0; a = 0; とか書かれたら混乱するだろ。 あ、でも屑はハンガリー人なんだっけ?
>>858 混乱するから数値のゼロもdefineしなさい
>>825 ,846
自分ならこんな感じで書く、程度のものですが思うけど良かったらどうぞ
https://pastebin.com/idm94WiU 別の機能を追加する必要とか出てきたとき、
ジャンケン自体を関数化してあげたほうがmain()関数内がゴチャゴチャしなくて良いかなと思って書きました。
typedef char String[1024]; とtypedefしてるのはたしかどこかの教科書の流儀だったはずだ 最近その話題を見かけた
あいこでの再戦と、もう一回じゃんけんするのは、 目的が違うんだから別ロジックにすべき。
同じ処理を共通化する 今後異なる可能性のある処理をあらかじめ分けておく いろんな設計思想がある
>>864 配列のtypedefって代入で問題にならんのかな
今のCの仕様追ってないけど昔は構文エラーになるから構造体に入れる必要があった
>>825 これは危険なので普通はやらない。
scanf("%s", nextStr);
>>868 jmp_bufは配列のtypedefだよ
>>871 そういやそうだね
ローカルに作って環境保存にmemcpyした覚えないから代入できるのか
色々忘れてるわ
ポインタを受け取る関数先頭では必ずnullチェックを行うコーティングルールが有るのですが malloc失敗したポインタをそのまま渡した時ぐらいしか使い道が思い付きません…
freeしたときに0入れるルールもあるんじゃないのそれ
>>873 杓子定規に適用したら形だけの無駄なチェック処理の典型だね。
上位レイヤとの境界のような意味のあるところだけなら現実的だけども。
仕様としてnullを許可する関数ではチェック不要としているのかあるいは一律に null渡し禁止としているのかで評価は変わりそうだが。
get_state()みたいな関数があって失敗時はnullを返す。それを知らずに別の関数に戻り値を直接渡してしまったとか、nullが誤って渡されるケースなんていくらでもあると思うが。 873が超天才でそんなミスは絶対ありえないとしても、他人のコードやドキュメントが間違ってる可能性もある
Player*とEnemy*を取るRPGのバトル関数で どちらかが死んでたらplayer->attack()関数は盛大に失敗する この時の当該playerは消滅したわけでは無いが enemyはメモリ上から消えている ついでにこのattack関数が実は関数ポインタに付けられたプレイヤーのスキルだった場合、 attackがカラッポだと、徒手空拳になるか防御するか何もしないか、何故か敵味方全員が即死していきなりエンディングが始まるかのどれかになる
安全性を取るならいついかなる時もNULLチェックは行うべき だがそもそもパフォーマンス至上主義だから Cという太古の言語を危険を冒してまで使っているということを考えると微妙 パフォーマンスが重要でないならCを使っていることからして論外
成否を含んだtupleを渡し実行時に判別、式全体を読み飛ばす粒度の小さい隠れた分岐構文みたいなの有ればいいのにねー 成否要素だけの反転は !!tulpevalue みたいな感じで c言語の仕事じゃないだろうしそもそもtupleなんて持ってないし うんこマが技巧駆使してわけわからんコード書くツールになるだけかもしれんし弊害いろいろ思いつくけど
>>878 召喚された悪魔が鼻から出てきて世界滅亡エンドも追加しといて。
>>879 Assertマクロとかでいいだろ
テストとかで引っ掛けるという実利に加えて「nullなんて渡すんじゃねーよボケ」と言うのを表明する意味もあるし
nullに意味を持たせないプログラムなら、 null checkしないと落ちる環境ならする意味ないんじゃね
Release build だと assert 消えるって知らない人意外と多いんですね
>>884 消えるって知ってるからassertにしろっていう意見なんだろう
その意見を完全にスルーしてコメントしてる人がいるよね
assertを本番環境に持ち込むべきと 主張する痛いやつが昔いたが 奴は今どうしてるかな
C++11 の static_assert は便利なんですけれどもね…これ、C に入らないかな… assert も static_assert と同じ用途・考え方で使うべきものかと思いますね
Cにもstatic_assertか 考えたこともなかったが 確かにあったらよさそうだな もういじるなってのが 俺の基本だが 追加に賛成できる珍しい例だ
>>892 > assertを本番環境に持ち込むべきと
> 主張する痛いやつが昔いたが
> 奴は今どうしてるかな
本番用はいちいちassert外してるのか?w
>>895 assert は Debug ビルドのときだけチェックを行う実装になってるのが普通
>>897 だから
>>892 が意味不明なんだけどw
>>898 リリースビルドで有効な assert を用意するだけだろ
何が不思議なの?
本番環境に持ち込むべき 影響出ないんだから こういうことでは
深いところで拾ったエラーを浅層に戻して対応する必要がなく「ダメよ」と述べ落ち許されるプログラムならば assert残すのも有りよね 実際#ifdef DEBUGで包んでるだけだし imagemagickなんかも引数チェックを通った後の個々パラメータ内で不整合出たらassertでメッセージ流して落ちるし
>>900 assert が発動してアプリが止まるのは終わり方として最悪だとおもいますよ
もし assert が発動する可能性があるんだったら assert ではなくて、きちんとしたエラー処理を記述するべきなのでは?
assert って辞書をみると「断言」「主張」「出しゃばり」くらいの強い意味ですね
私は assert はコメントの一種一様態として使います=
>>893 >>899 えっ?
>>892 が正しいという主張?
まあ
>>901 みたいな考え方もあるだろうけどさ
>>901 assertに引っ掛かったときの挙動は置いとくとしても、assertの処理内容や頻度によっては実行時コストが問題になる可能性も無くはないから、単純にやってよしとはならないと思うぞ。
効率厨はログ出力を見れるGNUemacsのeshell辺りででもwindowsプログラム立ち上げてみ? プロプラ、オープンソースに関係なく大半のリリースビルドが膨大な出力を出しっパになってる現状に絶望するだろうから
>>905 その環境で動かすと、プリプロセッサ段階で消去されているはずのデバッグ文実行結果が見れる様になるんですか?
>>905 処理内容や頻度によって実行時コストが問題になる可能性があると言っただけで効率厨扱いとはw
既存プログラムでログを大量に出しているからと反論しているが、だからそれがどうしたというのだ? ログを出しても性能的に問題ない範囲、頻度、量で出しているだけだろう。
>>907 assertion は「コメントの一種」という私の立場では、重い assertion の罪は軽い、許容できると感じています
組み込みだとタイミング込みで評価するから ビルドを切り替えられないんだよね assertはログだけ出すようにしてるが ウォッチドッグを効かすってのもありかな 起こり得ないところで使うってのはその通り
ロケット打ち上げ2秒後でassert出ても意味が無いな そのまま大爆発だ 衝突する0.5秒前でassert出ても意味が無い 時速90kmでそのまま衝突だ
uint64_t を配列の添え字に使えるかどうかって何か規格はありますか? 手元の環境は unsigned int のようなんですが、gcc/ming32-x64
>>911 何を見て「unsigned int のよう」と言っているの?
>>911 ISO/IEC 9899:2011 (E)
6.5.2.1 Array subscripting
1 One of the expressions shall have type "pointer to complete object type", the other
expression shall have integer type, and the result has type "type".
7.19 Common definitions <stddef.h>
size_t
which is the unsigned integer type of the result of the sizeof operator;
どこにもunsigned intに限定するとは書いてねえぞ
unsigned integerと書いてあるのが
おまえはunsigned intに見えるのか?
>>912-914 コメントありがとうございます
uint64_t と int をいいかげんにチャンポンに使っていたための祟りに襲われてしまっているところでして…
a[i] = *(a + i)
を考えれば、i が int = int32_t, であろうと uint64_t であろうと、うまくやってくれると予想できますね
>>916 それを言うならi[a]だ
ドヤるなら動作確認くらいしてからにしろ
そもそも後置演算子の[]が[a]iなわけねえだろ
STLの配列の添え字は、std::size_tと同じ範囲が使えるように思う。 このstd::size_tには長さの制約は多分ない。 常識的に考えて、32ビットのプログラムで64ビットの配列を使うことはあまり現実的ではない。 なので、std::size_tの長さはNビットプログラムにフィットするようにコンパイル時にスイッチされる。はず。
思うんじゃなく確認しろ、多分とか寝言ぬかしてねえで N4713 26.2.1 General container requirements Table 83 ? Container requirements X::size_type size_type can represent any non-negative value of difference_type 26.3.8.1 Class template deque overview // element access reference operator[](size_type n); const_reference operator[](size_type n) const;
具体的な規格の文面を引用して示してくれるのは有難いことでしょ。 手元にPDFとかで持ってても場所を見つけるのが苦労で諦めることが多いし。 size_type can represent any non-negative value of difference_type の部分を見ると size_t の大きさは difference_type の大きさに依存する、 少なくとも difference_type の正の範囲より広い、で合ってるかな。 ならば difference_type の範囲はどうなってるの? って具合に 疑問の先が移動するね。答えに近づいたけれど到達はしてない感じ。
俺は符号付のほうが好きだな 符号なしって扱いがめんどくさい
だがptrdiff_tは符号付きだ 絶対アドレスに符号はなくても オフセットには符号がある 配列の添え字はオフセットなわけだが それでもsize_tであるべきか?
BSTRのように、ときどき境界より前を参照したいことはあるかな
free()とかマイナスオフセットなしでどうやって実装するんだよ、とかね
いつになるか激的アーキテクチャの進化でも迎えない限り 64bitでmsbまで使い切る正数アドレスなんて無いから 相対はヌルチェック+自動整数変換に頼っときゃいいんじゃね fseek/off_tはなんかもやもや放置気味?誰が完全な解決をもたらすのか
俺はCからプログラミング言語は学んだが、Cから入って正解だったな あの苦難の道を思えばどれも大したことはない C++とRustを除けば
なんだっけそれ どっかで聞いたことあるんだが思い出せない
>>935 熱素やエーテルみたいな架空の物質モデル論のひとつ
>>936 アニメで引用されてた気がする
エヴァだっけ?ディラックの海ってリツコが言ってたような
2019年に成長したプログラミング言語ランキング、第1位は? 2020/01/10 09:18 後藤大地
https://news.mynavi.jp/article/20200110-952052/ TIOBE Softwareがこのほど、2019年に最もインデックス値を伸ばしたC言語が2019年のプログラミング
言語・オブ・ザ・イヤーに輝いたと伝えた。第2位はC#で、これにPythonとSwiftが続いている。
C言語のインデックス値が伸びた理由として、IoTおよび小型のインテリジェントデバイスにおいて需要が
高いためだという。C言語は短時間で習得が可能な上、すべてのプロセッサにおいてCコンパイラを利用
できる。TIOBE Softwareは、こうした状況がC言語のインデックス値上昇を招いたのではないかと分析
している。
発表された2019年におけるインデックス増加率と順位は次のとおり。[順位]プログラミング言語(増加率)
[1]C(+2.4%)、[2]C#(+2.1%)、[3]Python(+1.4%)、[4]Swift(+0.6%)、
2019年のプログラミング言語・オブ・ザ・イヤーは、2018年に引き続きPythonが受賞するだろうと考え
られていた。これは、Pythonが2018年に入ってから長期にわたって増加傾向を維持しているためだ。
しかし、2019年はC言語の増加率がPythonを超えて1位となった。C言語は2016年に一気にインデッ
クス値を下落させており、2017年後半から逆に増加に転じている。ずでに減少以前の水準まで戻って
きており、今後も同様のペースで増加を続けるかどうかはわからない。
仮に、今後も同様のペースでC言語の増加傾向が続いた場合、JavaとC言語のポジションが逆転して
C言語が首位になる月が出てくる可能性もある。しかし、過去の動向として、JavaとC言語は推移が同調
する傾向が強く、Javaが第1位でCが第2位という順位のまま推移する可能性もある。(中略)
TIOBE Programming Community Index (PCI)は、複数の検索エンジンの検索結果から、対象となる
プログラミング言語がどれだけ話題になっているかをインデックス化したもの。2020年1月におけるイン
デックスは次のとおり。
1月TIOBE Programming Community Index / 円グラフ
Cの文法や標準ライブラリがコンパクトだし覚えるべき概念も少ないのは間違いない
オブジェクト指向とポインタならポインタの方がラク それにメモリに沿ってるので分かり易い
ポインタとオブジェクト指向は別物だからな そもそも比べるのがおかしい
考えようによっては、ポインタとメモリの関係を理解してしまえば、 Cほど単純な言語とその標準ライブラリも他にないからなぁ
まあ組込みだとCでいいと思うけどテンプレとかも使いたいからオラはベターCだな
ま、抽象度が低いと覚えることは少ないんだよ。 論理回路は覚えることが超少ない。
覚えることが少ないというか物理的で直感的だからわかりやすい クラスとか言われても初心者には「?」だし
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを 追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。 C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、 それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる: - うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が 安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、 もはや笑えるレベルを超えている) - 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに 効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の コードがその素晴らしいオブジェクトモデルに依存していて、直すためには アプリ全体を書き直さなきゃなんない。 言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに 限定するってことは、他の人がそれをめちゃくちゃにしないってことで、 ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい 「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>>950 とりあえずお前はCに留まってろ
話はそれだけだ
初心者がC++を使うのはクラスが便利とかではなくて便利そうなライブラリを引っ張てこれるからだろう。
便利そうなライブラリを引っ張ってこれる時点でプログラミング初心者ではないし そもそもC++から始めるプログラミング初心者とか存在すんのか?
gccコンパイルしたんだが今どきのgccってC++で書かれてるんだな 恥ずかしながらつい最近まで知らんかった
質問です。32bitで確保できるメモリの上限近く(windowsなので1.5GBとか)を 色々なデータで確保した後、いっきに半分以上解放し、またいっきに色々なデータで 上限近く確保しようとするとmalloc()が失敗します(NULLを返す)。 プロセスのメモリを見ても500MBくらいまで落ちてから再確保しているようですがダメです。 これは内部で何が起こっているのでしょうか?断片化とかでしょうか??
追加ですが殆どのデータを解放して使用量50MBくらいにしてから しばらく待ってから再確保すると上手く行くようです。ただ500〜1000MBくらい残してから また上限近くまで確保しようとすると失敗します。何故でしょうか?
よくわからんけど、ヒープメモリの仕組みを調べるといいかも。
フラグメント 断片化 アドレス空間2GBの壁 諦めなさい
極端な例 256MBのメモリを8個確保 (2GB分) したあと 1, 3, 5, 7個目を解放 この状態だと 1GB空きがあるのに 連続で空いてるのは256MB だから512MBの確保に失敗する
>>967-969 やっぱり断片化ですか… 一旦使用量50MBまで減らしたら
断片化がかなり無くなったので確保が上手く行ったという事になりますかね。
更にうまくメモリ管理するか64bit化も考えようと思います。ありがとうございました。
細切れにならないように自分ででかく確保して その中をさらに自分で管理すると良い
>>971 もっと効率よくやるならその方法がやっぱいいですね。ありがとうございます。
そこまで大きいデータならオンメモリで処理する手段は捨てるなあ 間違えて数GBのISOファイル読み込んじゃってPC固まったとかそういう挙動は許されざるよ
メモリをポインタではなくハンドルで管理すれば メモリコンパクションができる ただし、そんなことをしなくても実容量を超えるメモリが提供できるようにするために仮想記憶があるんだが
実容量を超えるメモリーを使いたいだけならオーバーレイとかセグメント方式のメモリー管理機構とか色々あるが
>>976-977 32bitプログラムだとメモリ空間が最大でも4GBしか扱えないので
それ以上は無理ではないでしょうか?扱える方法何かあるでしょうか?
メインメモリとは別の記憶媒体に退避しておけば、実質使える?かな?
>>978 その理屈だと、4GBを超えるファイルは扱えなくことになる
32bit Windows の普通のプロセスのアドレス空間は2GB OSやAPIを改造してFARポインタを扱えるようにするか ロックアンロック方式のメモリ管理を自力で実装するか そんなことをするよりは 素直にアプリのメモリ確保の方法を変えるのが早い もちろん64bit化出来るならそれが一番
>>978 オーバーレイは同じメモリー空間のデータ/プログラムを入れ替えて実行する機能
メモリー空間の話であればバンク切替とかもあるし
>>982 どうしても使ってる一部のライブラリが32bitで64bit化するのが無理でした。
>>983 そちらを調べてみようと思います。
>>980-981 そうやっても必要な時にメインメモリに読み込んで使う必要がないですかね?
しかも上手くやりくりして読み込んでもそこで断片化の問題もありますし。
その場合プールを自分で管理するしかなさそうな気がします。途中でその話をしてましたが。
32bitOSで4GB以上のオブジェクトをメモリに読み込んでどうにかしろ、と言われたら。 最初に検討するのはファイルマッピングだろうなあ。それ以外だとやる気がおきない。 APIを叩く必要があるので、WindowsならCreateFileMappingとかMapViewOfFileとか。
>>986 ありがとうございます。調べてみますね。
>>984 > そちらを調べてみようと思います。
いやいや、オーバーレイとかバンク切替とかは半分ネタだから今更そんなもん調べなくていいよw
>>985 > しかも上手くやりくりして読み込んでもそこで断片化の問題もありますし。
アホほどでかいサイズでなきゃそれほど問題にならないよ
> その場合プールを自分で管理するしかなさそうな気がします。途中でその話をしてましたが。
どうしてもでかい領域を確保/解放する必要あるならそれしかないように思う
どうしてそんなデカいデータが必要なんだろう。遺伝子情報でも操作してんのかな?
>>988 >いやいや、オーバーレイとかバンク切替とかは半分ネタだから〜
ネタでしたかw 了解しました。
>アホほどでかいサイズでなきゃそれほど問題にならないよ
細かいのと途中で500MBくらいを二つとかがあるので時々断片化のせいでmallocが失敗するんですよねえ…
>どうしてもでかい領域を確保/解放する必要あるならそれしかないように思う
とりあえず作業領域様に500MBの領域を確保して再利用すると他の部分でmalloc失敗はなかったですね。
仰るように小さい領域はかなり確保しても問題にならないですね。大きな領域用にメモリスペースを予め確保しておく方法がよいかもしれないと思いました。
>>990 メモリーマップドは、かなり癖があるから注意して使った方がいいよ
ロジックなどの作りは簡単になるけど、
下手をすると処理が一日で終わらないなんて平気で起きる
もう64bitが当たり前になってかなり経つ昨今、そんな案件ごろごろある 映像をリアルタイムでごにょごにょとか言われたら簡単にギガ単位のメモリ使う 稀有な例では無いけど32bit環境でやれって言われたらヤダナとは思う
>>991 そうなんですね。了解しました。
>>989 >>992 詳細はあまり言えないのですがメモリ中に
動画データを一部展開しなければいけなくて
メモリ不足や断片化の問題で困ってました。
しかも周辺で使ってるライブラリが32bitで64bit化が難しくて。
8k240Hz動画だと1秒キャッシュするだけでメモリ消費24GBか まあ今時わざわざCを使うなんて極限環境だけだからそういうこともあるよね
>>992 無理かどうか分からないけれど、その32ビットの処理だけ抜き出して
外部プログラムにし、処理結果を受けとるみたいには出来ないのかな?
>>996 せめてDLLが別のプロセスモードとかで動いてくれればいいんですが…
よい案がないか引き続き考えてみますー
>>978 ちょっと待てや
おまえ単一仮想記憶を前提に話してるか?
今や多重仮想記憶が当たり前で単一仮想記憶はかなり特殊な存在だぞ
for (int i = 0; i < 1000; i++) { puts("1000"); }
-curl lud20241225054344caこのスレへの固定リンク: http://5chb.net/r/tech/1566050562/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「C言語なら俺に聞け 153 YouTube動画>7本 ->画像>4枚 」 を見た人も見ています:・C言語なら俺に聞け 140 ・C言語なら俺に聞け 150 ・C言語なら俺に聞け 148 ・C言語なら俺に聞け 151 ・C言語なら俺に聞け 152 ・C言語なら俺に聞け 144 ・C言語なら俺に聞け 145 ・C言語なら俺に聞け 155 ・C言語なら俺に聞け 160 ・C言語なら俺たちに聞け パート0001 ・CORBAなら俺に聞け ・キャンプの事なら俺に聞け! [無断転載禁止] ・ホームトレード(HT)のことなら俺に聞け”先物” ・LinuxカーネルはC言語なのにオブジェクト指向 ・パソコンのことなら何でも俺に聞け [無断転載禁止] ・機械語なら俺に質問しろ!その2 ・【SE】「C言語…?どこかで見た程度でOK」 名古屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる?★3 ・A「C言語・Java言語できます」B「Pythonと統計できます」C「JSについての知識ならだれにも負けない」←お前が面接官だったら誰雇う? ・C言語について ・C言語に詳しいやつきてや ・ソケット通信なら俺に任せろ ・C言語でRADって作れるんでしょうか? ・久々にC言語触ってるけどクソすぎじゃねこれ ・ワイC言語ますたー、何でも質問受け付ける ・海外「なんて論理的な言語なんだ」 日本語の構造を簡易化した図が外国人に大好評 ・1行ずつC言語を書いてくスレ(目標なし) ・一つの言語なのに「ひらがな」「カタカナ」「漢字」と3種あるのって日本語だけ? ・C言語の設計ミスった危険な関数トップ10決めようぜ ・C言語初心者なんだけど配列のポインタに詳しい人ちょっと来て ・ネパール、日本の外国人奴隷問題が影響か人気言語1位が韓国語になる ・【】流行り廃りはあるけれど、結局C言語に回帰するんだよね。C言語最強なんだよね ・【IT】Swiftがトップ10入り、Pythonは3位から4位へ--10月TIOBEの人気言語ランキング ・敵「プログラミングはやりたいことを見つけてからやれ」俺「よし見つけたぞ!C言語始めてみよう!」 ・【IT】開発者7万人に聞く、2018年学んだプログラミング言語第1位は? ・ハッカーになろうと思う。C言語最初に学べば良いんだよな?大手銀行の巨額の金を自分の口座に引き抜きたい ・【サッカー】<英国>相手チームの給水ボトルに小便…言語道断の行為でミルウォールのファン1名を逮捕! ・【企業】「”C言語…?どこかで見た”程度でOK」 名古屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる? ・【橋下徹】北朝鮮対策ならヤクザに聞け!インテリはわからないケンカの極意/小林よしのりら自称「保守」はなぜ共産・立憲民主を推すのか ・MRの恋愛は俺に聞け(笑顔)! ・OpenOfficeでわかんない事は俺に聞け ・【プログラミング】止まらないC言語の下落 - 12月言語ランキング [無断転載禁止] ・パーソナリティ障害専門 ID:yrsQmqMk ID:EWaqVut9 に聞け ・C言語って… ・C言語について ・C言語が理解できないのですが ・道州制は地域性や言語など語り継がれるべき ・C言語を教えてください!! ・■改竄なら俺にまかせろ(すが)■ ・■隠蔽なら俺にまかせろ(すが)■ ・あかりちゃんなら俺にもチョコくれると思う ・コンテンツ言語『 Curl 』情報交換スレ ・C++とC言語ってどっちの方がいいの? ・新コンテンツ言語『カール』って? ・「Ruby」が大人気言語になれない理由 ・C言語でアクションゲームが作りたい ・ラズパイ4でc言語開発する方法教えてくれ ・C言語始めた。GUIまでたどり着ける気がしない ・C言語でツール作ろうと思うんだけど何かいい案ある? ・C言語はバイトオーダー等のハードウェア構造を意識しなければ ・8ビットCPUでC言語?ないないありえないっしょ!5 ・C言語を学びたいんやが、まず何からやればいい? ・お前らC言語で通信ライブラリ作れって言われたら出来る? ・C言語×ダンジョン×学園なゲームを創りたいスレ ・インドの公用語ヒンディー語or古代語のサンスクリット語などのマイナー言語勉強してるやつおる? ・C言語でTCP/IP通信勉強(プログラミング)したいんだが
12:26:19 up 25 days, 22:50, 0 users, load average: 9.20, 8.82, 8.72
in 3.5273249149323 sec
@3.5273249149323@0b7 on 010702