高木信尚のブログ

名前付きの実引数が実現できるかも...

かなり前に書いた「可変個数の実引数の個数」や、本日書いた「マクロの可変個実引数の型を強制する」では、複合リテラルを使って何ができるかを模索しているわけです。この手のネタは、ちょっと考えればまだまだ出てきそうです。今回もそのひとつです。

マクロの可変個実引数の型を強制する

今回は単なる思いつきを備忘録として書き留めておくだけの内容です。過信はしないでください。

#define foo(...)

上のような省略記号を持つマクロの場合、省略記号の部分に指定した実引数を扱うには、__VA_ARGS__を使う必要があります。それ以前にマクロですので、関数原型のように型を指定できるわけでもなく、実引数の型を強制する方法は原則としてありません。それがよいところでもあり、悪いところでもあるのがマクロというものです。

今回は、そうしたマクロの特徴にあえて歯向かい、実引数の型を(関数と同程度に)強制しようという試みです。

またしても呪いのビデオ?

今回は私の感想と推測による内容ですので、話半分に考えてください。

ちょっと前のニュースになりますが、産経ニュースでNHK「みんなのうた」映像に“不適切”なカット DVD手直しへという記事がありました。「博士の独り言」の記事でも詳しく取り上げられていますので、そちらもあわせてご覧ください。

やはり、CとC++の区別がつかない人は少なくないようだ

教えて!gooで「C言語での質問です。」というQ&Aを見て感じたのですが、CとC++の区別がついていない人が少なくないことを改めて認識しました。No.3の回答がそれです。

>char str[3] = "AAA"; は 間違いですね コンパイルしたら エラーがでました。

このように指摘しているわけですが、このコードをCコンパイラでコンパイルしてエラーが出るとすれば、そのコンパイラが非標準処理系であるか、不具合があるかのどちらかです。「C++プログラマのためのC言語入門」の「第9回 文字定数と文字列リテラル」でも解説しましたが、char型の配列を文字列リテラルで初期化する場合、ナル文字分の要素が足りなくても問題なくコンパイルできます。

フルスペックのprintf?

ときどきの雑記帖 i戦士篇で引用されていた2ちゃんねるのやり取りを見て、思わず画面に向かって突っ込んでしまったので、そのことを記録しておきます。printfを自前でフルスクラッチで(stdarg.h以外には依存せずに)書きたいということのようです。

結論からいえば不可能です。これは誰にでも簡単にわかるはずです。stdarg.hにしか依存できないのであれば、どうやって標準出力に書きこむのでしょうか? 少なくとも、fwrite、putc、fputc、putchar、fputs、fprintf、vprintf、vfprintfのどれかに依存しなければ標準出力への書き込みができません。趣旨を考えると、fwrite、putc、fputc、putcharのどれかを出力に使うべきかと思います。putchar以外を使う場合は、stdoutマクロも必要になります。

非標準処理系と移植性

C/C++の移植性を考える場合、一般論としては、非標準処理系や処理系の不具合は対象にすべきではありません。そうした話を持ち出すと、結局のところ標準規格は一切機能しなくなり、何が起きても不思議ではない状況が発生してしまいます。

ただ、現実的には、主要な処理系、あるいは大多数の処理系が規格にしたがっていないような場合もあります。例えば、C++のexportとか、国際文字名とかがそれにあたります。そうした場合には、「規格がこうだから」という話をいくらしても、現実には役に立ちません。つまり、こうした場合には、いわゆる一般論は通用しなくなるわけです。

もうひとつ、必ずしも主要とはいえないけれども、今自分が相手をしている処理系、あるいは今後相手をすると予想される処理系が、規格とは異なる振る舞いをする場合には、当然それらに対する配慮を行わなければ、必要な移植性を持たせることができなくなります。

意外に面白いかも...

立場上こんなことを書いてよいものかどうか迷うところですが、現在執筆中の書籍はいまいち自信がなく、ちょっと嫌になりかけていました。ただ、そうもいってられないので、今年に入ってから、何とか奮起して大幅に加筆し、現在最終的なブラッシュアップの作業に入っています。

その過程で、自分の書いた文章を何度も読み返すわけですが、最初の章にかぎれば半年ぐらい前に書いたものですので、自分でも結構新鮮だったりします。そこで、「意外に面白いかも」と感じたわけです。若干中だるみするところもあるのですが、それは今後何とかするとして、我ながら、予想に反して(笑)よいできあがりになりそうです。

今のところの懸案事項は、どんなタイトルが付けられるかということです。案外知らない人が多いのですが、書籍のタイトルは出版社主導でつけられます。ですので、変なタイトルを付けられると、内容とあまりマッチしないということも起こりえます。アマゾンのレビューなんかでも、タイトルと内容が食い違っているとの指摘をときどき見かけますが、そういうことが起こるのです。

少なくともこの本は、私の人生の汚点となることは回避できたと確信しています。予定では今月中に脱稿します。その後のスケジュールは知りません。

最近はすっかり徹夜族

書籍の原稿や、書籍以外の原稿の執筆があり、最近は午前4時より前に寝たことがありません。すっかり徹夜族になってしまいました。こういうことを続けていると体によくないので、早いうちに足を洗いたいものです。新学期が始まれば、朝も早いので自然に元の生活に戻れるはずなのですが...。

こんなことを書いているうちに、もう3時半を回ってしまいました。今日も寝るのは5時か6時になりそうです。

面倒くさいのが嫌ならプログラマを目指すな!

もうすぐ4月になり、新学期がはじまります。私は、来年度も引き続き非常勤講師の仕事も行う予定なので、毎度のことながら同じようなやりとりを生徒と行うことになるんだろうなと想像しています。具体的には、コーディングを面倒くさがって音を上げる生徒とのつぎのようなやりとりです。

生徒 「面倒くさい。先生、何か裏技のような方法はないんですか?」
私  「あるよ、お金を払って外注に出せばいい」

もちろん、私のこの回答は適切とはいえません。ですので、その直後に必ず説明をするようにしています。仕事でプログラムを開発するのであれば、プログラムを完成させることが目的であって、自分でプログラミングするか外注するかは手段でしかありません。だから誰がやるかは交換可能なのです。もちろん、それができる立場でなければなりませんし、場合によってはそれで自分が仕事を失うこともあり得ますが...。

一方、勉強でプログラミングしているのであれば、能力を身に付けることが目的であって、プログラムを完成させることは手段でしかありません。だから自分でやるしかないのです。自分の状態を変化させなければならない以上、自分でやるしかありません。それを人任せにするのは、トイレに行くのが面倒だから代わりに行ってくれというようなものです。

今年の夏は串本に行きたい

今年、子供たちが夏休みになった時期には、是非串本に遊びにいきたいものです。お目当ては、このたび新潟の柏崎から移設されることになったケマル・アタテュルク像です。もちろん、せっかくですので、子供たちと海で遊びたいですし、おいしいものも食べたいわけですが...。今回は時事ネタということで、そのことについてお話します。まずは、約1年前の以下の動画を御覧ください。

コンテンツ配信
このエントリーを含むはてなブックマーク