• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プリプロセッサの上手な使い方を教えて下さい)

プリプロセッサの上手な使い方

このQ&Aのポイント
  • C言語のプリプロセッサを上手に使ってソースコードを綺麗に整える方法について教えてください。
  • プログラムのソースコードを分割し、メイクファイルやパラメータ用のヘッダファイルを作成する場合は、どのような方法が上手いのか教えてください。
  • パラメータ用のヘッダファイルにはどのような設定を書くのが適切でしょうか?また、文字マクロはヘッダファイルで設定するべきなのでしょうか?

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ああそうだ, 「パラメータの値は変わってもソースが変更されない」と単純には make できないので「消してから make」とか「更新時刻を無視して make」とかしないとダメですね. となると, あんまり make の意味はないのかもしれません. あと, もとのプログラムで #ifdef GRAINSIZE1 #define GRAINSIZE ( 1 ) #elif GRAINSIZE4 #define GRAINSIZE ( 4 ) #elif GRAINSIZE16 #define GRAINSIZE ( 16 ) #endif はまずいかもしれません. コマンドラインで -DGRAINSIZE4 のように定義した場合, #elif でエラーになるかも. 「定義されているかどうか」を問題にするなら #if defined GRAINSIZE1 #define GRAINSIZE 1 #elif defined GRAINSIZE4 .... #endif のように defined を使うべきです. 下の #include するファイルを決めるところも同じ. なお, ここでは <~> はたぶん変 (おそらく "~" を使うべきところ) ですし, #include するファイルがすべての場合において 1つだけなら #if defined __USEHOST__ #define INCLUDE_FILE "hostAES.cpp" #elif defined __USEDEVICE__ #if defined __KERNEL_AOS__ #define INCLUDE_FILE "kernel_AoS.cu" (以下略) #endif #endif #include INCLUDE_FILE のように書くこともできます. おっと, 「_」で始まる名前も危険だ.

g47040
質問者

補足

有難う御座います。教えて頂いた方向性で修正してみたいと思います。 うまいこと修正できたら、ここにアップしてみたいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず GRAINSIZE だけ, 1つの方針ですが: param.h は #if ! defined GRAINSIZE || (GRAINSIZE != 1 && GRAINSIZE != 4 && GRAINSIZE != 16) #error GRAINSIZE should be defined as 1, 4, or 16. #endif として, Makefile で GRAINSIZE = 16 NFLAG = -D __KERNEL_AOS__ -D GRAINSIZE=$(GRAINSIZE) -D __USEDEVICE__ とする. こうすれば, make のときに make -DGRAINSIZE=4 のように値を渡せますし, 何も書かなければ Makefile 中の値がデフォルトで採用されます. こうすると, 「値を変えても全くソースは変更しなくていい」ということになります.

g47040
質問者

補足

なるほど、かなり参考になります。どうも有難う御座いました!

すると、全ての回答が全文表示されます。

関連するQ&A