C
% ccache gcc ... % ccache g++ ...または, % CC="ccache gcc" CXX="ccache g++" ./configure ...みたいな.
gdb とかするには libtool とかでほげってしないと, % gdb ./hoge ... hoge: not in executable format: File format not recognizedってエラーでてだめ. % libtool --mode=execute gdb ./hogeとかやる.
てことで,書いた.(ちょうてきとう これで少し楽になった.はっは. #include <iostream> #include <glib.h> #include <unistd.h> using namespace std; class GTimerP { private: GTimer *Timer; gulong microseconds; gdouble time; public: GTimerP() { Timer = g_timer_new(); } ~G</unistd.h></glib.h></iostream>…
glibの timers を使おうとして,g_timer_continue を呼ぶと,「うまく言語化できない」などと言って,コンパイルできなかった. というか, g_timer_new/start/stop などは使えるのに,なぜ g_timer_continue が使えない... と思ったのだけど,結論からい…
インストール@Ubuntu % sudo aptitude install libglib2.0-dev パスの通った場所に glib.h ははいらない バージョンを明示的に指定するためなのかな? -I とか -l とかつけないと,エラーいろいろでる. hoge.cpp:10:18: error: glib.h: No such file or di…
-g -Wall デバッグ情報をのこす,警告をすべてだす gdb a.out > r run > bt backtrace > l list
ビットを扱うのって、苦手な人が多い気がする.自分ふくめ。 目に見えないからわかりにくいんだよね、たぶん。しかし、ビット演算は、つかえると非常に便利だとおもう。まだ便利に使えるほどつかえないけど。 #include <stdio.h> void dec2bin(const int decimal_orig</stdio.h>…
forkさせると、プログラムの流れがどうなるのかいまいちわからん。 // fork.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> int main() { pid_t pid[10]; int count = 0; for (; count < 10; count++) { pid[count] = fork(); if (pid[count] < 0) { </unistd.h></sys/wait.h></sys/types.h></stdlib.h></stdio.h>…
execl と execv の違いは引数の渡し方。 // exec.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("execl:\n"); execl("/bin/cat", "cat", "exec.c", NULL); printf("execv:\n"); char *argv[3] = {"cat", "exec.c", NULL}; execv("/bin/cat", argv); </unistd.h></sys/types.h></stdio.h>…
daytimeに接続. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> int main() { struct addrinfo info, *res; int sock; FILE *f; char buf[1024]; int err; // ゼロリセット memset(&info, 0, sizeof(struct addrinfo)); // ip…</netdb.h></sys/types.h></sys/socket.h></unistd.h></string.h></stdlib.h></stdio.h>
#include <stdio.h> void call(void (*f)(const char *), const char *); void print(const char *); void greeting(const char *); int main() { call(print, "sotarok"); call(greeting, "sotarok"); return 0; } void call(void (*f)(), const char *msg) { f(msg)</stdio.h>…
printfとかで使われてるあれ。 「...」ってかわいいですね。 #include <stdio.h> #include <stdarg.h> void print_args(int nnum, ...); int main() { print_args(5, 1, 2, 3, 4, 5); return 0; } void print_args(int nnum, ...) { int i = 0, tmp; va_list arg; va_start(arg,</stdarg.h></stdio.h>…
http://docs.sun.com/app/docs/doc/805-7886/6j7drf0sr?l=ja&a=view
分割した要素を結合するときにはすでにミクロな集合内ではソートされていることが保証されているため線形時間で結合できる。というかんじ。 // merge_sort.c #include "merge_sort.h" void merge_sort(int *array, size_t size) { int div = (int)size/2, *l…
環境依存だとは思うけど、Mac OSX だと、 typedef unsigned long __darwin_size_t; /* sizeof() */ って定義されてた。@ppc/_types.h
クイックソートをC言語で書いてみたら思いのほか書けなくてびっくりした。。そしてへんこんだ。でもまあ、リハビリだと思いつつがんばる。あとあれ、マージソートとの違いは、分割前に並び替えちゃうのか、統治時に並び替えるのか、そこなのよね。 // qsort.…
そうそう、ものすごく基本的なところではあるけど。配列を関数の仮引数に指定したときってどうなるんだっけーってそんなネタあったよなーと思って。 #include <stdio.h> void print_size(int *size) { printf("--sizeof--\n"); printf("%d\n", sizeof(size)); printf(</stdio.h>…
http://d.hatena.ne.jp/strkpy/20090313/1236971227 ああーなんか変だなーとおもってたのは,これ,先頭要素の削除とかができないのかw 先頭もポインタにして書き換えないとだめだった.
Makefile。それと、リンク。うーん。 //hello.c #ifndef _STDIO_H_ #include <stdio.h> #endif #include "hello_main.h" int main() { int count = 1; hello_main(count); return 0; } // hello_main.h void hello_main(int); // hello_main.c #ifndef _STDIO_H_ #inc</stdio.h>…
なんかなにも整理されてないけどとりあえず。特にfindあたりがひどい。つかinsertもひどいか。。deleteもひどいな。つか全部ひどいか。。。まあなんつーかそうだよねーってかんじだけど。。あーなんだかなー。まあなんていうかポインタあたりの復習にはなっ…
じゃなくてポインタの配列だったのね. //コレ *argv[];
ポインタも配列も,変数そのものはアドレスを指し示すという意味では同じだけど, ポインタは,定義するだけじゃサイズが決まらない.ポインタとして定義したものには配列のアドレスを代入するとサイズがわかるようになる.的な... だから,以下のような…
ポインタって,なにがややこしいって,ポインタそのものの概念じゃなくて,宣言と使い方だと思うんだけどな. 宣言時には * つけるとそれがポインタって意味になって,使うときは * が無いその変数名がポインタで,* は実体じゃん,それが結構ややこしくね,…