C
考えてみりゃ当たり前だったのですが……パイプ経由で出力をうけとる時、単純にscanf使えばいいです。 実際のところ #include <stdio.h> int main() { char str[1][0x100] = { "" }; scanf("%s", str[0]); printf("%s is good!\n", str[0]); return 0; } $ echo 'hoge' </stdio.h>…
#include <stdio.h> int main() { //多次元配列 char str[2][0x10] = { "", "yeah!" }; //ポインタ変数の配列 char *str2[2] = { "", "yeah!!" }; printf("%p,%p\n", &str[0], &str[1]); printf("%p,%p\n", &str2[0], &str2[1]); return 0; } 多次元配列が宣言通りの</stdio.h>…
arduinoのavr系実装ではavr-libが使われています。 実際のところ rint()は浮動小数点をまるめ込んで整数にしてくれる奴です。 いくつか派生関数があるのですが、avr-libにはlong型を返すlrint関数しかありません。 'rint' is not declare in this scope とか…
美しいCプログラミング見本帖―ポインタ手習い指南作者: 柏原正三出版社/メーカー: 翔泳社発売日: 2004/04メディア: 単行本購入: 2人 クリック: 44回この商品を含むブログ (9件) を見る発行は2004年と結構前です。 最新鋭のC11などには対応してない可能性…
arduinoで動作チェックも兼ねたカウンターを作っておりました。 ここ数年、型を意識しないですむ言語ばかり扱っていたためか、久々にやらかしたのでメモ。 マイナスになる可能性がないカウンターなら、最初から符号なしにしましょう。 実際のところ char cnt…
RPC=>遠隔制御。 JSON-RPCは、そのJSON版。JSONらしいシンプルな記法で、遠隔操作を実現します。 ダウンローダのAria2ですとか、BItcoin、あとはopenElecみたいなエンタメサーバの制御に使われています。RESTなAPIと違い、受け手がHTTPを解釈できなくとも…
C言語的構文のfor文において、変数宣言部では複数の変数を設定する事が可能です。 まことに恥ずかしい話ではありますが、プログラミングで飯喰って5年は経つのに最近はじめて知りました。 実際のところ for文の宣言部に書くことで(コンパイラなりVMの実装に…
ちょっとJavaScriptで遊びたいなーと検索をかけたところ…… オンラインREPL「http://repl.it/」を発見しました 使えるものの一例 JavaScript以外にも、色んな言語が実装されています。 一通り遊んでみた範囲では、軽い動作検証程度であれば十分用は成すようで…
コマンドの意味を知る時に使う、manコマンド。 実は...同名のC言語ライブラリ関数を調べる事ができます。 例えば、printf(3)とかです。何もやらなければ $ man printf | head -n 6 PRINTF(1) BSD General Commands Manual PRINTF(1) NAME printf -- formatte…
OSSプロジェクトでは良く見かけるifdef 自前のコードだと余り使わない子ですが、使い所はあります。種類によって一行だけ違うコードがある場合、ifdefやif defineを使うと楽にいけます。 パターン1:ifdef 対象コード #include <stdio.h> int main() { printf("yes\n</stdio.h>…
デザインパターンとは... GoFというタツジン級エンジニア集団が提唱した、イケてる実装スタイル集の事を指します。 類似の問題があれば、これを適用するとスマートに書けるというスグレモノ。 そもそもデザインパターンとは みんな大好き結城先生によるデザ…
REPL(Read Eval Print Loop)は対話的開発環境なんて言われるアレです。 Rubyで行けばirbに相当します。 Lispから来た考え方のようで、星人本でも一章を割いて解説しています。今回おっ魂消たのは、これ動的言語のみの特権ではなかったという事です。 本題:C…
組込み機器といえば、センサーですね。 温度センサーで水温測ったり、加速度で転倒検知したり。 ところが、こういうモノは値ブレブレで一意に定まりません。 ここで活躍するのがWITHIN構文です。 TEST_ASSERT_INT_WITHIN(delta, expected, actual); これは、…
TEST_ASSERT_EQUALはINT型の計算結果を返します。 公式ドキュメントによればTEST_ASSERT_EQUAL_INTと同じ意味合いらしいです。 ……というわけで #define END_FLAG 0b11111111 int8_t result = END_FLAG; というコードに対して TEST_ASSERT_EQUAL(END_FLAG, re…
mrubyで書いたコードをC言語内で読み出す方法です。 今回はまんま参考もと様と同じ内容ですが…… mrubyコードをC言語に埋め込む 今回導入するコードは以下の通り C言語のコード ソース1。mrb_funcallで実行開始です。 3番目が呼び出す関数名、4番目が引数…
strtokはchar配列を特定のcharにて切り分ける関数です。 安全版のstrtok_rもあります。感じとしてはRubyのsplitメソッドみたいです。 が、ちょいと癖があります。 Ruby風に言えば破壊的メソッドです。*1 挙動 初回 最初に対象となるchar配列と切り分け文字を…
今回はCeedlingのコマンドに関してです。 とりあえずは、全部テストの rake test:allとビルド内容をクリアする rake cleanさえ使えれば大丈夫です。 それに加えて以下のコマンドを使えると更に捗ります。 verbosity rake verbosity[0] test:allといった感じ…
以前の記事で紹介したTDDフレームワークUnityですが、 それの強化発展版としてCeedlingというものがあります。 Sinatraにとってのpadrinoみたいなものですね。 前提 Ruby / Rack が動作する環境 gcc系のC/C++コンパイラ 手順 $ gem install ceedlingで導入完…
今回は、今まで適当に扱っていた構造体に対するメモです。 間違った箇所があったら、コメントを頂けると幸いです。 typedef struct { char addr; char dataLength; } wap_pcb_t; static wap_pcb_t pcb; 関数内部やら、グローバル変数やらにアクセスする場合…
奥さん、僕ぁC言語でもTDDしたいんですよ! ……というわけで、Rubyで実現する素敵なC言語TDD環境、Unityです。 3Dゲームを作るアレではなく、TDD用テストフレームワークです。 UnityはRubyistにはお馴染みのRackを使っています。 Ruby&Rack環境が方は先に導入…
よくあるコマンド入力型の実行ファイルをCで作る場合のTipsです。 何も考えず取り掛かると、string.hの各種関数に頼ったり……果ては if (str[0] == 'h' && str[1] == 'l' && .... ) { hello(argc, argv[]); } ... などと、混沌としたコードになりかねません。…
volatileはお節介焼きのコンパイラにぶぶ漬けをお出しする修飾子です。*1たとえば、以下のような処理をしたいとします 書き込み先:0x12345678 (外部インタフェイスへのアドレス) 書き込むもの:(順番に)0x31,0x32,0x33 //ASCIIの'1','2','3' この内容ならポ…