Berlin にはあまり日本人が住んでいないが,100人ほどは投票に来るということであった.確か 3000 人ほどいるということであるし,投票の管轄が広いことを考えると,投票率は低い気はする.ところで,大使館の対応はとても丁寧でやはりここは日本なんだなあと思う.ドイツには普通の店でさえここまでの丁寧な対応はない.
外国で投票することのメリットは日本の選挙運動を聞かなくて良いことである.ドイツでは日本の選挙運動のような無意味な迷惑行為はない.政策も言わずに名前を連呼するのを聞く度に,このような迷惑行為を平気でする人間にどうして票を入れると考えるのだろうか,と思う.また,名前を連呼してそれで票が本当にあつまるのであろうか.(ところでこれを読んでいる日本人でない友人のために説明すると,日本では選挙のキャンペーンで候補者が名前を宣伝カーで連呼するという驚くべき風習がある.これは冗談とか嘘ではない.たとえば,「SPD を宜しくお願いします.」とか,「メルケルに一票を!」 などということをスピーカーをそなえた車を使って叫ぶのである.そこには政策についての議論などはまずなく,単に名前を連呼するのである.珍しいので選挙のシーズンに観光の一環としてビデオにとって YouTube に置くのもよいかもしれない.) 政策を気にする人は新聞なりテレビなり,知人の意見なりで来めるであろうし,気にしない人に名前を連呼してそれで入れようとするとは思えない.日本には標語も多いがそれと似たようなもののような気がする.(たとえば,犯罪者が標語を見て犯罪を思いとどまるとも思えないという意味である.) しかし,今回私が票を入れた人がもし日本で名前を連呼していたらどうしようと心配である.この点に関してはドイツの方がすばらしい.
とはいえ,張り紙による選挙運動はドイツにもある.たとえば,ある巨大政党がWir haben die Kraft. という張り紙を出している.日本語では「俺達には力がある」となって,これは「お前ら俺達に逆らっても無駄なんだよ」と言っているような気がする.メルケルさんは独裁でもしたいのかなあと心配になるのである.ここでの Wir は私は政党が言っていることと思ったが,もしかするとドイツ国民のことを言っているのかもしれない.しかし,それもまた外国人の私としてはちょっと怖いのである.「俺達には力がある」という言葉は弱い人々には励みになるかもしれないが,現実に力を持っている人には思い上がりに結びつきやすく,良い結果をもたらした例は少ないと感じている.
日本では第45回の衆議院総選挙が8月30日に行なわれる予定である.私は日本に住んでいないのだが,最近は在外選挙という方法で投票が可能である.最近は,というのはこれは 2000 年から可能になったことであり,また,最初は比例代表制しかできなかったものが,2007 年以降は小選挙区制の投票も可能になった.これには裁判があり,小選挙区制の投票ができないことは違憲であるとの判断があったのである.私はこれによって恩恵を受ける者の一人であり,関係者各位の努力に感謝する.が,前回は投票日を間違えて投票しないという失態を犯してしまった.在外の人は日本よりも早く投票しなくてはいけないことを知らなかった.まったく...
今回はそういうことはしないぞと心に決めていたので,公示された後(8月18日公示) にできるだけ早いうちにと 21 日に大使館に投票に行った.もし何か失敗しても余裕があるからである.
日本大使館の入口には日本語で「選挙はこちら」と書いてある.すばらしい,しかし,大使館の門では日本語は通じないのだ.Ich komme hier fuer die Wahl. (選挙に来ました)と言ったが,さてこれが正しいかは自信がなかったので,die Wahl, die Wahl (選挙,選挙)と繰り返した.すると,Haben Sie wahrscheinlich... (そちらはおそらく~はお持ちですか) のような言葉の断片が聞こえたので,wahrscheinlich was? (おそらく何でしょうか?)と(失礼な言い方だが)聞き返しながら,とりあえず文書を見せれば良いだろうとパスポートと選挙人証を見せたら通してくれた.しかし通った後で思ったのだが,Haben Sie den Wahlschein? (選挙人証をお持ちでしょうか) と尋ねたのではないかと思う.私の友人には私が R と L を聞きとれないということを理解してくれない人が多いのだが,どうだ聞きとれていないだろう.まいったか.と言いたかったが,ろくでもない自慢である.まいったなあ.
投票場には5人の人がいた.最初の人は投票の概要を説明してくださった.投票用紙はこちらが比例代表,こちらが小選挙区のもの,郵送するための封筒(A)に選挙人番号を書いて欲しい,などなど.おっとちょっと待った.これでは私が誰に投票したかわかってしまうではないか.と思っていると,さらに4つの封筒が示された.一つの投票に対して,大小2つの封筒(B:大,C:小)を使う.投票用紙は小さな封筒 C に入れる.これには何も書かれていない.その小さな封筒 C を大きな封筒 B に入れる.この大きな封筒には選挙人の番号を書いて署名する.これらを最初の封筒 A に入れて郵送する.これは立合い人の元で開封され,署名された封筒B から小さな封筒 C が取り出され,それは他の投票を混ぜ合わされる.と,こうやって選挙の秘密を守るということである.もちろん開ける時点で不正があればわかってしまうことであるが,信頼できることと思うし,私としては誰に投票しているかわかってもかまわないことでもある.
...続く.
今回はそういうことはしないぞと心に決めていたので,公示された後(8月18日公示) にできるだけ早いうちにと 21 日に大使館に投票に行った.もし何か失敗しても余裕があるからである.
日本大使館の入口には日本語で「選挙はこちら」と書いてある.すばらしい,しかし,大使館の門では日本語は通じないのだ.Ich komme hier fuer die Wahl. (選挙に来ました)と言ったが,さてこれが正しいかは自信がなかったので,die Wahl, die Wahl (選挙,選挙)と繰り返した.すると,Haben Sie wahrscheinlich... (そちらはおそらく~はお持ちですか) のような言葉の断片が聞こえたので,wahrscheinlich was? (おそらく何でしょうか?)と(失礼な言い方だが)聞き返しながら,とりあえず文書を見せれば良いだろうとパスポートと選挙人証を見せたら通してくれた.しかし通った後で思ったのだが,Haben Sie den Wahlschein? (選挙人証をお持ちでしょうか) と尋ねたのではないかと思う.私の友人には私が R と L を聞きとれないということを理解してくれない人が多いのだが,どうだ聞きとれていないだろう.まいったか.と言いたかったが,ろくでもない自慢である.まいったなあ.
投票場には5人の人がいた.最初の人は投票の概要を説明してくださった.投票用紙はこちらが比例代表,こちらが小選挙区のもの,郵送するための封筒(A)に選挙人番号を書いて欲しい,などなど.おっとちょっと待った.これでは私が誰に投票したかわかってしまうではないか.と思っていると,さらに4つの封筒が示された.一つの投票に対して,大小2つの封筒(B:大,C:小)を使う.投票用紙は小さな封筒 C に入れる.これには何も書かれていない.その小さな封筒 C を大きな封筒 B に入れる.この大きな封筒には選挙人の番号を書いて署名する.これらを最初の封筒 A に入れて郵送する.これは立合い人の元で開封され,署名された封筒B から小さな封筒 C が取り出され,それは他の投票を混ぜ合わされる.と,こうやって選挙の秘密を守るということである.もちろん開ける時点で不正があればわかってしまうことであるが,信頼できることと思うし,私としては誰に投票しているかわかってもかまわないことでもある.
...続く.
size_t と printf の問題の話を前回したが,この問題をもう少し考えてみると,va_args に起因することがわかる.va_args ではプログラム側でどんな引数の型をとっているのかをプログラム側で知る必要があるからである.引数のpromotion はおそらくこの問題を緩和しようとして考えられたものであろう.
先日出会ったバグは以下のようなものであった.このバグは 64bit 環境でしか起こらない.
va_args を使った函数として,以下のようなものを考えよう.
---
void vafunction(const char* p_name, ...)
{
va_list ap;
va_start(ap, p_name);
while(p_name != 0){
// do something
p_name = va_arg(ap, const char*);
}
va_end(ap);
}
---
これを,
vafunction("This sometimes doesn't work in 64bit.", 0); // (1)
として呼び出すと,クラッシュすることがある.ただし,常にクラッシュするとは限らない.デバッガで追いかけてみると,クラッシュする場合には,p_name が0 にならず,segmentation fault を起こすのである.しかし,
vafunction("This should always work in 64bit.", NULL); // (2)
ならば大丈夫である.ここでの違いというのは函数の最後の引数が 0 か NULLかというだけである.
これはvafunction 側では 64bit の (const char*)を想定しているにもかかわらず,(1)における 0 は 32bit の (int)0 であるためである.
(2)が問題を起こさないのは NULL が 64bit の (void*)0 として定義されているからである.そのため,このクラッシュは 32bit 環境では発生しない.(1)の場合でも,なんらかの理由でスタックに 0 が余計に入っていた場合にはクラッシュしないことがあるが,それは偶然である.
先日出会ったバグは以下のようなものであった.このバグは 64bit 環境でしか起こらない.
va_args を使った函数として,以下のようなものを考えよう.
---
void vafunction(const char* p_name, ...)
{
va_list ap;
va_start(ap, p_name);
while(p_name != 0){
// do something
p_name = va_arg(ap, const char*);
}
va_end(ap);
}
---
これを,
vafunction("This sometimes doesn't work in 64bit.", 0); // (1)
として呼び出すと,クラッシュすることがある.ただし,常にクラッシュするとは限らない.デバッガで追いかけてみると,クラッシュする場合には,p_name が0 にならず,segmentation fault を起こすのである.しかし,
vafunction("This should always work in 64bit.", NULL); // (2)
ならば大丈夫である.ここでの違いというのは函数の最後の引数が 0 か NULLかというだけである.
これはvafunction 側では 64bit の (const char*)を想定しているにもかかわらず,(1)における 0 は 32bit の (int)0 であるためである.
(2)が問題を起こさないのは NULL が 64bit の (void*)0 として定義されているからである.そのため,このクラッシュは 32bit 環境では発生しない.(1)の場合でも,なんらかの理由でスタックに 0 が余計に入っていた場合にはクラッシュしないことがあるが,それは偶然である.