![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?e8efa67)
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部シンボル "_main"は未解決です
-
” OS ビルド ” の意味が分か...
-
ILSpyで、デコンパイルできない。
-
親フォルダのIShellFolderイン...
-
デコンパイル?について
-
LoadLibraryについて
-
セミコロンについて
-
他のLinuxでも動くa.outの作り方
-
cmakeは何をするのですか? cma...
-
ヘッダファイルに関数本体を書...
-
クリティカルエラー Expressio...
-
<math.h>があるのにsqrtが・...
-
MFCのエラーについて
-
1 つ以上の複数回定義されてい...
-
ビルドとリビルドの違いを教え...
-
VBAを何回も作り直して、容量が...
-
Macで Arduino Unoでコンパイル...
-
BCCのbcc32.cfgファイルとilink...
-
C++のデフォルトinclude文?
-
コンパイル??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
1 つ以上の複数回定義されてい...
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
C言語でヘッダファイルにグロー...
-
” OS ビルド ” の意味が分か...
-
マクロ コンパイルがグレーバック
-
【VC++6.0(MFC)】警告「LINK : ...
-
クリティカルエラー Expressio...
-
PRO*C コンパイルエラー
-
[c++] <pthread.h>がinclude で...
-
<math.h>があるのにsqrtが・...
-
CImageクラスの使用について
-
ビルドとリビルドの違いを教え...
-
戻り値について
-
コンパイルエラー:ユーザ定義...
おすすめ情報