データチェックの続きを経てプログラムの解析へ。
上記のように、昨日見つけた不具合は元データのせいだと判明したのでそれはそれでいいのですが、それとは別にあるDBの更新が別のDBへ自動的に反映されるという機能がありまして、それがどうにもこうにも上手く行きません。ある機能では上手く行くものの、他の機能では…という訳の分からない状態であり、某忍者部隊の「最後の武器」よろしく最後の手段としてプログラム解析に入ったわけです。そのプログラムは「C言語」でして、若手の人にはあまりなじみがないということで私に声が掛かっていたりします。とはいえ私が「拳銃」であるかは微妙ですが。
それはそれとして、いろいろ見ていると内部関数に構造体の実体を渡してそこにデータをセットするというものがありました。
struct DATA{ int a; char b[100]; } DATA data; int main(){ data.a=0; memset(data.b,'\0',sizeof(data.b)); func(data); fprintf(stderr,"a=%d",data.a); .. } void func(DATA data){ a = 100; ... }上の例で「func(..)」というのがその関数なのですが、「fprintf(stderr,"a=%d",data.a);」のところで「a=0」と表示されます。よくよく見ると「void func(DATA data)」、即ち、仮引数になっているため、本来更新したいエリアが更新されていなかった分かりました。
上記のようにJava等を主に扱っていた若い人にはこのあたりの感覚が分かり難かったんでしょうねえ…。若い人に馴染みがないような言語を非常に重要な機能の実装に使うのもどうかと思わないでもないですが、「上」の判断などあるから私が口を出してもどうしようもないというのがなんともはや。そういうのをやらされている方々に同情を…というかこっちが同情してもらいたいような。誰かがいってましたが、私の状況って「ただの被害者」ですから…