• ベストアンサー

関数内で引数の別名称を定義したい

関数への引数として構造体のポインタを指定しているのですが、 その構造体のある要素については関数内で別名称を使用したいと思っています。 単純化した例をあげますと //child --------------------- typedef struct{ char bookTitle[100]; int pageNum; } Book; //parent --------------------- typedef struct{ Book book[1000]; int bookNum; } Library; void bookSet(Library *lib); という構造体と関数に関してbookSet関数内ではlib->pageNumをpNumという名称で使いたいです。 普通はbookSet(int pNum)と定義して引数に構造体の要素を渡すと思うのですが、その場合プログラムを書き換える(構造体の他のメンバにもアクセスする)時にいちいち引数を指定しなおさなければならず、また引数に何が入っているのかをすべて確認しなければいけないので他の方法を模索しています。 今のところdefineとifdefを使うしかないかなと考えているのですが… 同じような経験をお持ちで、よいアイディアありましたらお待ちしてます。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

pageNumならLibraryじゃなくてBookの方ですよね? ポインタ使って int *pNum = &(lib->book[x].pageNum); でいいのでは。 ※xは配列要素 それが嫌なら、関数前で #define pNum(x) lib->book[(x)].pageNum 関数後で #undef pNum とかやりますか? C++なら参照で int &pNum = lib->book[x].pageNum; てな事も出来ますが……

carcl
質問者

お礼

回答ありがとうございます。失礼しましたBookの方です。 やはりポインタかdefineを使うことになるのでしょうか。C++なら参照も使えるのですね。 いろいろ試してみます。ありがとうございます。

その他の回答 (1)

回答No.2

 こんばんは。  良し悪しは別として、こう言う事でしょうか? #include<stdio.h> //child --------------------- typedef struct { char bookTitle[100]; union { int pageNum; int pNum; }; } Book; //parent --------------------- typedef struct { Book book[1000]; int bookNum; } Library; void bookSet(Library* lib, int bookNum, int pNum) { lib->book[bookNum].pNum = pNum; printf("[pNum : %d][pageNum : %d]\n", lib->book[bookNum].pNum, lib->book[bookNum].pageNum); } int main() { Library lib = {0}; bookSet(&lib, 25, 12); return 0; }

関連するQ&A