コンピュータやソフトウェアのあれこれ@道民(&元道民)
お知らせ
Hokkaido.pm#7は今週末ですよ!
5月 8th
行こうと思ってたけど申し込んでない方はお忘れなく。
お申し込みは、こちらから!(懇談会は、こちらから)
今回も、JPAの協力によりゲストが来てくれます。
ゲストは、なんとriywoさんです!
As a Futurist…
Hokkaido.pm #7 に参加させて頂きます
という訳で、自分もLT(まだ準備してない)でなんかやりますので、
是非、techno_nekoには興味ないけど、riywoさんに会いたい!みたいな感じで、
こちらから参加して頂ければと思います!!!11
おしまい。
2次元配列で参った続き
12月 13th
#include <stdio.h>
//void print3x3Matrix(const long m[][3])
void print3x3Matrix(const long (*m)[3])
{
printf( "--- matrix ---\n" );
printf( "%3ld, %3ld, %3ld\n", m[0][0], m[0][1], m[0][2] );
printf( "%3ld, %3ld, %3ld\n", m[1][0], m[1][1], m[1][2] );
printf( "%3ld, %3ld, %3ld\n", m[2][0], m[2][1], m[2][2] );
}
int main(int argc, char *argv[])
{
long matrix[][3] = {
{ 0, 1, 2 },
{ 10, 11, 12 },
{ 20, 21, 22 }
};
print3x3Matrix( (const long (*)[])matrix );
return 0;
}
結局、分かったことはこんな感じ。
引数の書き方として、3行目と4行目はどちらも同じということ。
関数を呼ぶときに、const付きでキャストしてあげれば、
警告はでないということ。
vcだとでないけど、gccだと出るということ。
(確かに、普段はVC9だけど見た事がない。)
char **をconat char **を引数に取る関数に渡しても、
同様の警告がでるらしい。
詳しくは「C言語 FAQ 日本語訳」を読むと良いと思う。
(リンクしても良いのか判断しかねたので、検索してください。)
という訳で、Cコンパイラさんは、ルールにのっとって警告しているだけで、
この点に関しては、ユーザーの判断でキャストするのが良さそうです。
ちなみに、long (*m)[3]とlong *m[3]は意味が違うから気を付けてね。
おしまい。
2次元配列で参った
12月 13th
#include <stdio.h>
void print3x3Matrix(const long m[][3])
{
printf( "--- matrix ---\n" );
printf( "%3ld, %3ld, %3ld\n", m[0][0], m[0][1], m[0][2] );
printf( "%3ld, %3ld, %3ld\n", m[1][0], m[1][1], m[1][2] );
printf( "%3ld, %3ld, %3ld\n", m[2][0], m[2][1], m[2][2] );
}
int main(int argc, char *argv[])
{
long matrix[][3] = {
{ 0, 1, 2 },
{ 10, 11, 12 },
{ 20, 21, 22 }
};
print3x3Matrix( matrix );
return 0;
}
で、これをコンパイルすると、
warning: passing argument 1 of ‘print3x3Matrix’ from incompatible
pointer type
13行目にconst付けて宣言するか、
関数の引数からconstを取ると、このwarning消えるみたい。
こういうコードを多々書いてきて、warning出た事ないから、
地味に焦ってたり。
ちなみに環境は、
Mac OS X 10.6.5, Intel Core 2 Duo
gcc -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5664~89/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)
このままだと、一人Advent Calendarが頓挫しちゃう、
ってのはどーでも良い話だけど、お願い助けてエロい人!
気が向いたら、助けてくれると幸いです。
おやすみなさい。
blogを一本化します
10月 4th
まぁ、ほとんど、こっちのweb日記は放置状態だったので一本化も糞もないんですが、技術ネタ余り書かないのに二つもあってもしゃーないなぁ ということで、こっちに一本化することにしました。
動機としては、tdiaryはだいたい触ってわかったのと、wordpressみたいなモダンなシステムもちゃんと触っておきましょうか、という感じです。
というわけで、「技術部」を外して「まっ」にタイトルが変わりました。