C言語

memsetによる0埋め

Cはその値がどういう内部表現かを定めてないので(というか実装依存の部分がかなり多い気が^^;),memsetで強制的に0で埋めたとして,それがNULLポインタや浮動小数点などの値として正しいとは限らない.大抵の環境では問題ないようだけど,極稀に違う環境がま…

型のdefdef詐欺について

昨日こんなこと言って,それに対する補足. C #include <stdio.h> typedef int foo; int main(void) { int a = 1; foo b = a; printf("%d\n", b); return 0; } は普通に1. D import std.stdio; typedef int foo = 1; void main() { int a = 1; foo b = a; writefln(b</stdio.h>…

enumと#defineとconst

enum Mode { A, B, C }; で綺麗に書けるのに #define A_MODE 1 #define B_MODE 2 #define C_MODE 3 とわざわざ書く理由が分からない.そもそも#defineは置換で使うものなので,列挙とかで使うのは型もないし使用目的からいって違う気がする.Cみたいにconst…

epoch@まつやま2008の予選問題

予選期間が終わったので,とりあえず自分が書いたのを晒してみる(終わったし問題ないはず).minunitとか問題付きのアーカイブはこちら.久しぶりのCでした.長くなったので続きを読む.ついでに言うと,別に面白いソースではありません(minunitも削除済み).

前方宣言と関数プロトタイプ

void hoge(); // (1) void hoge(void) // (2) これは両方とも関数宣言であり,(1)が引数が不明な前方宣言,(2)がその内のプロトタイプ宣言.何でこんなこと書いたのかと言うと,俺がTAをやってる講義で使用されているテキストで,(1)がプロトタイプ宣言とし…

MinUnitの存在感

JTN002 - MinUnit -- a minimal unit testing framework for C C++だとCppUnitとかあるんだけど,C言語には何かテスト用ライブラリがあるのかなぁと探して見つけたのがこれ.これの凄いのはなんと言っても #define mu_assert(message, test) do { if (!(test…

久しぶりのC

俺も気晴らしを兼ねてコードを書いていたのだけど嵌る嵌るww enum {} printf(foo); scanf(foo); scanf("%d", foo); arr.length; しかも何故かある関数の後にIO関係を使うと,総無視されるかWindowsが例外投げる(アセンブリ出力してみてフローを見たけどち…