Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。144件0マクロ関数について勉強しています。以下のコードを実行すると、エラーが出てしまいます。解決法教えてください。票4マクロ関数を使っていることはエラーとは直接関係ありません。マクロを使わずに書くとABS(x);の部分は次のようになりますが、これでも同じエラーが出るはずです。-1;とカッコを付けたかのように解釈されます。x)は代入先として不適当なため、質問にあるようなエラーメッセージが表示されます。直接的な修正としては、次のようにカッコをつけてやれば良いです。cppreference.comあと今回の質問とは無関係ですがscanfの引数ABSマクロに余分なセミコロンがついているABSという名を使うのであれば、絶対値を返すことだけに集中し、代入は外でやるべきなどいくつか気になる点があります。コンパイルに通ってしまいます。仕様の違うところをピンポイントで踏み抜いているという。-1;;と解釈されます。代入演算子の左辺が変数でないので怒られています。-1;;となるのでコンパイルでき、期待通りに動きます。マクロは避けてください。マクロですが、実用的に使おうとすると複数個の問題を抱えています。どれだけ問題(になりそうな)点があるかを読者の皆様も数えてみてください。最低3個は指摘できるはず。使わないでください、になりそうです。等分析ツールがビシバシ指摘してきます)。個の銅バッジ引数が複数回評価されるので、単項演算で意図しない結果になる、演算式を書くとコンパイルエラーになるかも知れない。書き方によっては、これは回避できそう。関数で表現できるときは引数付きdefineマクロを使わないので今まであまり考えていませんでした。|03項演算子の中で代入をしようとしているからです。以下のようにするとそのエラーそのものは解決すると思います。-1以下は質問への回答ではありませんが参考文献として。expr2)に書けるのは式です。代入文を書きたいならばif文にしましょう。