ゆとりーなの日記

日記的な事を書いて行くと思はれる

C言語

代入した方が早し

C言語でとある構󠄁造󠄁體のswapを實裝すると云ふ話に某所󠄁でなつたのですが、 // とある構造體 struct hoge { int a; int b; char c[32]; // 文字列を想定 }; この構󠄁造󠄁體をコピーする際に普通󠄁に=を使󠄁ふかメンバを總て明示的にコピーするかでどちらが良いか…

GNU擴張({})がやばい

普通複數のカウンタをインクリメントするfor文を書く場合、 for (i = j = 0; i < N; ++i, ++j) { } としますが、今日twitterにて for (i = j = 0; i < N; ({++i; ++j;})) { } といつた回答を見かけたので、そんなん通る訣ないだらうと思つてコンパイルしてみ…

最近マイブームの可變長引數

風呂あがりに何となくBinary Hacks ―ハッカー秘伝のテクニック100選高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸 オライリー・ジャパン 2006-11-14売り上げランキング : 131355Amazonで詳しく見る by G-Toolsを讀んでゐたのですが64bit環境のLinuxでN…

なんだかんだでC言語が最強疑惑

久々の日記はハードウェアを叩くとかそんな話です。 あるハードを叩くコードをC言語で用意しようとすると大抵かうなります。 #define HOGE_BASE 0xffff0000 #define HOGE_HUGA_OFFSET 0x00 #define HOGE_HAGE_OFFSET 0x04 #define HOGE_HUGA (HOGE_BASE + HO…

switchと後藤さん

最近少々興味深いコードを見かけました。 void hoge(int val) { printf("value %d\n"); switch(val) { case 1: printf("value is 1\n"); break; case 2: printf("value is 2\n"); break; . . . . case 17: printf("value is 17\n"); break; defualt: printf(…

int main(void)だけどコマンドライン引數餘裕でした

C言語のmain函數は特殊です。引數を取らないパターン(int main(void))、コマンドライン引數を取るパターン(int main(int argc, char **argv)等)を書くことが出來ます。 今回はint main(void)のパターンでもmainを呼ぶ側はきつとコマンドライン引數をレジスタ…

macのclangはなんか知らんがブロック構文が使える

Macのclangはどうもデフォルトでブロック構文が使えるという機能があるようです。 #include <stdio.h> int main(void) { void (^a)() = ^(){puts("blocks");}; a(); return 0; } これが特になにもオプション付けなくても通ります。最初拡張子が.mや.mmじゃないと駄目</stdio.h>…

実行時The World!

今日はサンクと継続の勉強会に言ってきたわけですが、そこで実行時にマシンコードを生成して呼び出すという話が出てきたので昔ちょっとやって諦めた実行時に"The World!"と表示するプログラムを生成して呼び出すに再チャレンジしてみました。 というのも昔は…

言語別コンテスト

少し前のとある課題の速度勝負というイベントが発生したのでいざ勝負したわけです。 エントリーNo.1 D言語 import std.stdio; import std.algorithm; import std.random; Random gen; int[] result = [0, 1, 2, 2, 1, 0, 1, 1, 1, 0, 0, 0, 2, 1]; int count…

C言語よりJavaの方がもっと嫌いです

今年からJavaの授業が始まってるので、アンチJava勢としてはストレス倍増効果が絶賛爆発中です。 以下不満列挙です。 Eclipseとかだるい しょっぱな講義で統合開発環境の偉大さを聞かされました。まぁ確かに端末系エディタが個人的に好きではないので、端末…

ポインタの例でswapをやるのはポインタの分かり難さを助長してる気がする

講座的なサムシングに向けてちょっと思ったので。まぁポインタ迄やるか、そもそもC++までやるかは正直よく分からないのですが。 C言語でポインタの例でよく例題として扱われるのが値の交換を行う所謂swapの実装です。 void swap(int *a, int *b) { int temp …

Dメーカーにやられた可能性は大いにある

本日某ラボにてC言語の試験が行われました。結果はまぁ残念なことになってしまったわけですので、今日はここで反省会です。 端末の挙動に慣れてないとこうなる 問の雰囲気:標準入力から一文字ずつ読んで連続したスペース、タブを一つのスペースに置き換えて…

Cプラー

C言語でメモリがどうこうって言うんで詳しく聞いてみたら、double型の二次元配列[5000][10]を10個位置いたら実行時に落ちたって言うんです。コンパイルは通るんだけどとの事です。そりゃ落ちますよ。Windowsって言ってたからPCなんでしょうけど、スタックだ…

50000HIT記念?C言語の期末テストで撃沈!

散々な結果でした。C以下確定です。専門はC++だからとか言ってられないレベルです。 というのもとある問題に引っかかってしまったからなのですが、まあ問題の詰んだ部分をを要約すると、与えられた文字列をひっくり返す関数を穴埋めせよという感じになります…

リストとかの話

yappy氏のカンニング幇助疑惑の話はどうやら露骨に解答らしきものを載せなければいいとの話だったみたいなので、これなら耐えそうだということでリストの話でも。 さてさてお題はCtrl+Dを押すまでの数値を取って、それら全てを表示するというもの。授業資料…

今更だけどC言語とC++は別物です

よくC/C++という表記を見かけることがありますが、あれはあまりいい表記ではないですね。知らない人が見たら誤解します。よくCのすごい人はC++をdisるのを見かけますし、C++のすごい人はCをdisります。そろそろ「CとC++って似たような言語でしょっ?」て言…

ダブルポインタにどこまでconstが付けれるのか

少し気になったので試してみました。 int main(int argc, const char * const * const argv) { argv = nullptr; // コンパイルエラー *argv = nullptr; // コンパイルエラー **argv = 0; // コンパイルエラー return 0; } 普通に3つ付けられました。パター…

ページビュー30000越え記念?「C言語なのにC++を持ち込む人って」

今大学の方でC言語の授業があるわけですが、言うまでもなく私はC++の人なので、どうしてもC++っぽいものがソースに混ざりこんでしまうのです。例えば、 #include <stdio.h> const double kPi = 3.141592; int main(void) { printf("%f", 2.0 * kPi); retrun 0; } Cで</stdio.h>…

ゲームに使う浮動小数

所謂floatとdoubleどっちが速いか論争です。大分前に書こうと思って放置してたネタです。私の記憶が正しければ放置したまままだ書いてなかったはずです。 よく言われるのが、最近はfloatよりdoubleの方が速いし精度も良いからdouble一択という話です。これは…

仮想関数テーブルを元に戻す輩がおった

昨日COMメソッドの一部をフックする手法を紹介しましたが、あれと同じ原理でIDirect3DDevice::EndSceneをフックすると、途中でフックが切れる的な現象に見舞われてしまいました。どうやら何者かがせっかく書き換えた仮想関数テーブルを元に戻してしまうらし…

COMフック再び

新たなCOMフックの手法を試したところ成功したのでメモメモ。 目的のメソッドだけCOMフック 以前COMフックの手法をこのブログでも取り上げましたが、あれだとフックしたいメソッドは数個しかないのに、別にそのままの挙動で良いものまできちんと書かないとい…

みんなマイクロソフトが嫌いなの?

昨日は雪降りました。積りました。雪かきの流れです。たまにやる雪かきは楽しいですね。あと今日は都合によりC++でシューティング作りますか第1回ではありません。第1回がいつ行われるかは未定なんです。 またタイトルと記事内容が一致しているぞ ひょっとし…

帰り道にタイトル考えてたんだけど忘れた

普通に忘れました。 まあこの時期に普通に麻雀打ってしまいましたね。打っとかないと駄目かなとか思ってしまったんですね。今回は振ったりアガったりで2東風共に2着+1*2という割と楽しい卓となりました。打っといてよかったですね。因みに今日は最後まで残ら…

何かが始まる

よりにもよってこの時期に何か始まるらしいです。この時期に。今日の夜21時かららしいです。詳しくはyappyの日記にて。今回は敢えてリンクは貼りません。Google先生で検索してyappyの日記の表示を上に上げましょう。 さて、今日の雑記。Direct3Dでは事ある毎…

余裕でかかってました

かかってました。新型インフルです。流石に5人もの感染者と接触してればうつりますよね。 なんでも書類を書かなければいけないとか何とかで、そのための紙を印刷するのにFireFoxでPDFを開こうとしたらフリーズするわフリーズ。グーグル先生に訊いてみてもよ…

今日のポインタ

昨日までとは一転して普通のC言語の話が語られる予定です。お題はポインタです。なんで今更ポインタなんだということになるのが必然の流れですが、なんかC言語やってる人で物凄いことをやっている人を見てしまったので。 やっていたこと //乱数を得る関数…