defineとconstの使い分け


便利な#defineですが、defineを使わないほうがいいこともあるかもしれません。

例えば

#define A_STR "abcde"

とすると、A_STRを記述したすべての部分で別々の文字列として
定義されるため、コード量が増えるような気がします、なんとなく。
ここは

const char * A_STR = "abcde";

としたほうがプログラムメモリの節約になりそうな気がします。
が、実際には同じ文字列の場合だと、コンパイラが気をつかってくれて
増えないようです。(XC8 1.44)

逆に

const char A = 5;

とすると、プログラムメモリにAという領域が設定されてしまいます。
アクセスも遅くなるし、プログラムエリアも無駄になります。
これに関しては

#define A 5

のほうがいいことになります。これは(XC8 1.44)でも正しいです。
単なる定数にconstは避けるべき。