WindowsでC言語のプログラムを作成する時によく用いられる環境の1つとして、Cygwinが挙げられます。CygwinはWindows上でUnixを擬似的に再現した環境のことで、完全な互換性は無いものの、多くの場合は問題なく利用することができます。
しかし、そんなCygwinでもデフォルトではいくつか問題があります。その1つとして、Cygwin上でコンパイルしたプログラムはCygwin1.dllというライブラリがないと動作しないという点です。これはつまり、Cygwinでコンパイルしたプログラムは、Cygwinが入っている環境でしか実行できないというわけです。これでは、Cygwinが入っていない環境で実行したい場合などは非常に困ってしまいます。
そのような対応するために、Cygwinのgccでは「-mno-cygwin 」というオプションが提供されています。これを利用することで、Cygwin1.dllがない環境であってもバイナリを実行できるようになります。
このオプションを付加することによって起こりえる問題もあるのですが、それについてはここでは割愛します。下記のウェブページでは、より詳細に紹介されています。
[web] "-mno-cygwin"- Cygwin を使用した MinGW 実行形式のビルド - Studio Sixnine.
[web] Cygwin - Wikipedia
2007年8月 3日(金)
更新日:2008年01月10日(木)17:29
C言語
C言語のプログラムを書き換えてきて、ちょっと調べ物をしていたら、今まで知らなかったことが出てきてびっくりしてました。C言語を習ってから6年くらい経ちますが、今更になってこんなことでびっくりするなんて…。
そのびっくりした内容とは、C言語で使われている「short」や「long」型修飾子は、実は「short int 」「long int 」の省略形 だったってこと。確かに「int」=「integer」=「整数」ってことで、英語に直すとそっちの方が自然です。「short」とか「long」とか言われても、何が長いのか短いのか分からないしね。
また、「unsigned int」は「unsigned」に省略できたり、かなりの場面でint型修飾子は省略できるようです。豆知識というかあんまり自分では使わないですが、他人の書いたソースに出てきたりして困ったときには知っておくと良さそうです。
[web] 型修飾子 - WisdomSoft
2007年6月28日(木)
更新日:2008年01月10日(木)17:21
C言語 , Java
ここ最近、C言語からJavaへの移植ばかりやってます。けっこう頻繁に出てくるわりに忘れたりするので、ここにメモしておきます。
今回紹介するのは、C言語の string.h にある strchr を Java に移植する場合です。関数 strchr は、第1引数の文字列の中に、第2引数の文字を検索して、そこへのポインタを返すというものです。詳しくは以下のページを参照してください。
[web] strchr - 初心者のためのポイント学習C言語
C言語版
char *string = "123-4567";
string = strchr( string, '-' );
これをJavaに変換すると、だいたいこんな感じになります。
String s = "123-4567";
s = s.substring(s.indexOf("-"));
2007年1月26日(金)
更新日:2008年01月10日(木)16:48
C言語
C言語のstring.hにはstrncpy関数が定義されていますが、この関数を用いるときは注意しなければならない点があります。それは、コピー先には終端記号「\0」が自動的につかないこと 。第3引数で指定した範囲しかコピーしないので、自分自身で終端記号を付ける必要があります。
たとえば、こんなコードがあったとしましょう。
char* str = (char*)malloc(sizeof(char)*100);
strncpy(str,"abcde",3);
すると、変数strが指す記憶領域には次のように記録されます。
str → | a | b | c | x | …| \0 | …|
上で書かれているx はランダムな文字(値)です。そのため、運よくx に終端記号が入る場合もありますが、別の値が入る場合もあります。そうなった場合はその文字(値)自身も文字列の一部として認識されてしまいます。このような場合を防ぐには、自分自身で終端記号を代入するのが一番確実です。
*(str+3) = '\0';
上のコードではマジックナンバーで指定してありますが、実際は変数か定数で指定したほうがよいでしょう。
2006年5月 3日(水)
更新日:2008年01月10日(木)16:13
C言語
標準ライブラリ関数の中に、strtokという関数があります。これは、区切り文字を指定することで、文字列を分割して取得できるというもの。
宣言は次の通り。
#include <string.h>
char *strtok(char *s1, const char *s2);
第1引数には分割される文字列を指定します。そして、第2引数に区切り文字を指定します。これによって、返り値に分割された1つ目の文字列が返ってくるというわけです。2回目以降の呼び出しでは、第1引数にNULLを指定することで続きを取得することができます。これ以上取得できない状態になると、NULLを返すようになります。
詳細は、次のURLに載っています。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
2005年1月13日(木)
更新日:2008年01月10日(木)15:37
C言語
今プロジェクトの課題でC言語でプログラムを組んでるんですが、ちょっとおかしな挙動を示していて困ってます。手元にデバッガがないのが痛いんですが、printfで出力してみると、
double value : 1.000000 int value : 0
実際こんなことってあるんでしょうか。普通にprintf("double value : %f\tint value %d\n",value,(int)value);ってやってるだけなんですが。このせいでプログラムの挙動がおかしいのは分かってるんですが、具体的な解決方法が思いつきません。さてどうしたらいいのやら。
続きを読む