前提・実現したいこと
教師をしていますが,学生が変なプログラムを書いてきたので,シンプルにして実験してみたのですが,プリプロセッサの挙動が自分が考えている結果と異なるのですが,これは仕様でしょうか?
発生している問題・エラーメッセージ
"#define A 10" ですが,Aが変数のように扱われる。そういうものなのでしょうか?
該当のソースコード
C言語
1#include <stdio.h> 2#define TEST A+1 3int main(void){ 4 #define A 10 5 printf("%u\n",TEST); 6 #define A 30 7 printf("%u\n",TEST); 8} 9
試したこと
実行結果ですが,
"#define TEST A+1"
が先に全体に処理されて,二つのprintf文のTESTは,A+1 に置き換わると考えました。
次に,main関数の#define A 10 により,A+1 はすべて10+1に置き換わり,
"#define A 30" では,もうAがないので,何も置き換えないと思ったのですが,
実行結果は,
11
31
となりました。まるでAが変数になっているようです。
補足情報(FW/ツールのバージョンなど)
Arduinoのコンパイラとpaiza.ioで試しました。
回答2件
あなたの回答
tips
プレビュー