C言語においてのマクロの仕様を教えてください。
(1)マクロ内でコメントは不可なのでしょうか?
(2)マクロ内で変数定義は不可なのでしょうか?
マクロは実行された場所に展開されるだけの認識ですので、
マクロ内で変数宣言されている場合、関数の先頭でしかマクロが使えない?
よろしくお願い致します。
----以下作成コード----
#define TESTMACRO(result,a,b) \
do{ \
int tmpData = 5; \
if( a=0){ \
result = -1; \
continue; \
} \
if( b=0){ \
result = -1; \
continue; \
} \
result = a*b*100; \
}while(0)
int main(){
int result = 0;
/* 他の処理 */
TESTMACRO(result,a,b);
/* 結果resultのログ表示 */
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
(1)コメントはすでにあった通り、/* */なら問題無し。
(2)については、どちらとも言えない。
マクロは文字を置き換えるだけです。「正しい」かどうかは、その置き換わった後のソースコードがC言語として正しいかどうかによります。
例えば
#define print(a) }
と定義すれば
void func(){ print("Hello World")
等と、一見、括弧忘れの間違いのように見えるソースコードが、実は「文法的に正しい」ソースになったりします。
(動作内容は別として)
ちなみに、今回のに関しては別の問題があります。
if( a=0){ \
if( b=0){ \
を=から==に直したとしても、
TESTMACRO( result, 1+1, 1-1 ) ;
と呼び出したとき、期待通りでは無いはずです。
No.4
- 回答日時:
(1)マクロ内でコメントは不可なのでしょうか?
利用可能です。
C言語では、
1. \(バックスラッシュ)による改行の削除
2. コメントの削除
3. マクロの展開
の順で処理されます。
そのため、//による一行コメントはマクロ内では正しく使えないことが多いです。
/**/によるコメントであれば普通に利用できます。
(2)マクロ内で変数定義は不可なのでしょうか?マクロは実行された場所に展開されるだけの認識ですので、マクロ内で変数宣言されている場合、関数の先頭でしかマクロが使えない?
定義可能です。定義したマクロはどこでも利用できます。
C言語では、 変数は"ブロック"の先頭で宣言および定義しなければいけません。
つまり、マクロ全体を{}でくくってしまえばマクロ内で普通に変数定義できます。
また、C99以降であればこの制限もありません。
ただし、変数名の衝突には十分注意してください。
(1), (2)のいずれも、しっかり注意しないとバグの元となるので気をつけてください。
No.2
- 回答日時:
>(1)マクロ内でコメントは不可なのでしょうか?
>(2)マクロ内で変数定義は不可なのでしょうか?
実際にそういうコードを書いてみて、思ったとおりに動けば
「ああ、できるんだ」ということが実感できると思います。
No.1
- 回答日時:
そもそも、
>if( a=0){ \
>if( b=0){ \
ここは何をしようとしていますか?
もし、aやbが0と等しいかどうかをチェックしようとしているのであれば、
思ったとおりの動きはしないと思います。
比較演算子の仕様を確認なさる方がいいような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで別のセルにあるふり...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
Excel2013 VBA マクロ実行中に...
-
エクセルに張り付けた写真のフ...
-
IF関数を使ってマクロを実行さ...
-
Excel 改ページのVBAうまくい...
-
エクセルのマクロについて教え...
-
ExcelVBA 図形をクリックした...
-
EXCELのVBAでRange("A1:C4")を...
-
Excelのマクロについて教えてく...
-
有効数字N桁のマクロについて
-
MSアクセスのマクロ・モジュー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報