

type型の二つの値を交換する関数形式マクロ
swap(type,a,b)を定義せよ
例えばint型でx、yに5、10があたえられているとき、swap(int,x,y)を
呼び出した後は、x,yには10と5が格納されていなければならない。
・・という問題で以下のようにswapを作ったのですがエラーがでます
どこが問題か教えていただけないでしょうか?
#include <stdio.h>
#define swap(type,a,b) (m = a a = b b = m)
int main(void)
{
int x = 1,y = 2,m;
swap(int,x,y);
printf("x=%d y=%d\n",x,y);
return(0);
}
No.5ベストアンサー
- 回答日時:
#3 salsberryさんとまるかぶりしました。
失礼しました。参考になるサイトがありましたので貼っておきます。
http://www.nurs.or.jp/~sug/soft/super/macro.htm
参考URL:http://www.nurs.or.jp/~sug/soft/super/macro.htm
No.4
- 回答日時:
#1です。
コンパイルエラーの原因はわかっていただけたでしょうか?
参考までに,私が考えたマクロを貼っておきます。
このマクロのメリットは外部にint宣言しなくても使えることです。
#define swap(type,a,b) {type m; m = a; a = b; b = m;}
No.3
- 回答日時:
すぐに考えつくのは
#define swap(type,a,b) { type m; m = a; a = b; b = m; }
ですが、これだと
if (x < 0) swap(int,x,y);
else { ... }
のような使い方をした場合に問題が出るので、もう一工夫が必要です。
No.2
- 回答日時:
回答者#1です。
少し情報を追加します。プリプロセッサによって#defineマクロは展開されています。コンパイラがどのように処理しているか確認出来ますのでその方法を紹介します。
お使いのコンパイル環境のコンパイルオプション(またはスイッチ)でプリプロセッサのオプション(またはスイッチ)を探して有効にして下さい。これでどのように#defineが置き換えられているか確認出来ます。
例として「gcc」と「VC++」の設定方法について書いておきます。
【例1】「gcc」の場合
「-E」で標準出力されますので「src.c」をコンパイルする場合「gcc -E src.c > src.i」とすると「src.i」にファイルが作成されます。
【例2】「VC++」の場合
「/P」を追加してコンパイル。VisualStudio2008の統合環境からは「プロジェクト」の「プロパティページ」から「構成」の「構成プロパティ」,「C/C++」,「プリプロセッサ」を順に開き,「前処理済みファイルの生成」を「いいえ」から「行番号付き (/P)」に変更してコンパイル(ビルド)します。ソースファイルと同じ場所にソースファイルの拡張子が「.i」のファイルが生成されます。
No.1
- 回答日時:
こんにちは早速ですが問題点について説明します。
「#define swap(type,a,b) (m = a a = b b = m)」の場合,「swap(int,x,y);」 は次のように置き換えられる事が予想されます。(この場合は単純に「a」に「x」,「b」に「y」にそれぞれ置き換えるだけです。)
(m = x m = y y = m);
これではコンパイルエラーが出るはずです。「m = x; m = y; y = m;」などになるような#define定義が必要です。
尚,この問題の回答としては「type」も使うようなコーディングを求められていると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAではRound...
-
PRO*C コンパイルエラー
-
c++ , template , ファイル分割...
-
AVRプログラム 関数から戻って...
-
ILSpyで、デコンパイルできない。
-
VBAを何回も作り直して、容量が...
-
ビルドから除外されたソースの...
-
” OS ビルド ” の意味が分か...
-
VB6とInputManソフトの関係
-
gdbデバッグのためのmakefile作成
-
「utime.h が見つからない」エ...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
アクセス2003 ファイルの...
-
デコンパイル?について
-
windowsでLinuxで作成したソー...
-
1 つ以上の複数回定義されてい...
-
ヘルプましんについて教えて下...
-
sys/types.hの必要性について
-
makefileのmakeでコンパイルす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
1 つ以上の複数回定義されてい...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
外部シンボル "_main"は未解決です
-
C++コンパイル時に『 C1083: in...
-
ビルドとリビルドの違いを教え...
-
コンパイルエラー:ユーザ定義...
-
「DeclareステートメントにPtrS...
-
戻り値について
-
pyc 編集 閲覧
-
PRO*C コンパイルエラー
-
【VC++6.0(MFC)】警告「LINK : ...
-
漢字のコメントをはずすとコン...
おすすめ情報