• ベストアンサー

Cの最初の行に

hashioogiの回答

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.3

私が以前他人のソフトを解析していた時に見た使用例の紹介です。 まず #define INPUT #define OUTPUT と定義した上で、 void func (INPUT int a, OUTPUT int *b) { : : } のようになっていました。 変数aは関数の入力、変数bは関数の出力ということがなんとなくわかります。 一見c言語の文法に合っていないように思われますが、翻訳時にプリプロセサが void func (int a, int *b) { : : } にしてから翻訳しますので問題はありません。

reiman
質問者

お礼

中身の無いマクロ変数も使い道が有るのですね 参考になりました ありがとうございました

関連するQ&A

  • C言語の#defineについて

    初歩的なことですみませんが、 #define命令はソースのどこに記述しても問題ありませんか? 一応、コンパイル時には問題ないようですが。 また、#ifdef,#ifndef,#elseifとうのマクロ全般においてはどうなのですか? どなたか教えていただけませんか?

  • C初心者です

    学校でC言語を習い始めたばかりの初心者です。以下のプログラムを作成したいのですが、お教え願います。ちなみに授業では整数型の変数を定義してなんちゃらとか、printfというところまでしかやってません。 1、5人の身長の平均を求めるプログラム(小数点以下切捨て) 2、1の人数5に対してNUMBERというマクロ名を与え、プログラムを書き換えよ。(#defineで定義とか言うひヒントがかいてありました) 3、#defineによるマクロ名を使うメリットは何か? という3つです。 1は変数を5個定義してやればいいんですかね?それを全部足して5で割って…、でいいんでしょうか? 2,3はまったく分かりません。 かなり簡単な質問かとは思いますが、なにぶん始めたばかりなものなので、お教え願います。 できたらプログラムリストを示していただきたいです。 宜しくお願い致します。

  • (msvcr71d.dll) でハンドルされていない例外が発生しました

    Visual C++ を勉強しだした Windowsプログラム初心者です。 ある参考書のサンプルで、メールスロットを利用したメッセッンジャー体験プログラムがあります。 このプログラム一つで、クライアントとサーバーを実感する為のもので、ダイアログボックスだけで出来ています。 デバック実行で、画像にある[送信]ボタンを押すと、 「Mailslot.exe の 0x1021471c (msvcr71d.dll) でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000015 を読み込み中にアクセス違反が発生しました。 。」 とエラーボックスが出ます。 原因は パソコンのOSのバージョンなのか、何か足りないライブラリなのか?切り分け所がわからなくて困っています。 どなたか良いアドバイスをお願いします。 OS : Vista Home Premium IDE: Visual C++.net スタンダード version 2003 因みに、stdafx.h の内容は↓です。 #pragma once #ifndef VC_EXTRALEAN #define VC_EXTRALEAN #endif #ifndef WINVER #define WINVER 0x0501 #endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400 #endif #ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0410 #endif #ifndef _WIN32_IE #define _WIN32_IE 0x0400 #endif #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 一般的で無視しても安全な MFC の警告メッセージの一部の非表示を解除します。 #define _AFX_ALL_WARNINGS #include <afxwin.h> #include <afxext.h> #include <afxdisp.h> #include <afxdtctl.h> #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> #endif #include <Lmcons.h>

  • 2重定義って??

    C言語のプログラミングの勉強をしています。 そこで2重定義というものを知り調べたのですが、良く分かりませんでした。コンパイルの仕組みなども併せて教えてください。お願いいたします。 恐れ入りますが、どなたか初心者にも分かる位のレベルで教えて頂けますでしょうか? 簡単な例があると助かります。 不明点 ・2重定義とは例えば1つの*.hを2つ以上の*.cでインクルードする場合にのみ有効なのか? 自分で調べた結果 2重定義防止用として #ifndef HOGE #define HOGE ~~~~~~~~ #endif 上記のようなことを一般的には行うことは分かったのですが、 これをやったことでどうなるのか??

  • #ifndefとかヘッダファイルについて

    http://www.geocities.co.jp/SiliconValley/6071/technic/16.html に書いてあることで質問です。 /* myheader.h */ #ifndef __myheader_H__ #define __myheader_H__ : : : #endif と記述されているのですが、ここの「#define __myheader_H__ 」というのは、myheader.hをインクルードしているという意味になるのでしょうか? あと、ifndef等でヘッダファイルが読み込まれているか判定する際には、コンマをアンダーバー(アンダースコア)に変えるという作業は必ずいるようですが、いろんな所を調べてみると、例えば、myheader.hについて判定する場合は、 __myheader_H__ myheader_H _myheader_H _MYHEADER_H 等、アンダースコアが先頭と最後に2個付いていたり、先頭に1個だけだったり、全部大文字にしていたりと、様々なものがあるのですが、これはどの様な表記を使えばいいのでしょうか?

  • 条件付き取り込み

    C のヘッダーファイルでは、条件付き取り込みとして、 #ifndef SAMPLE #define SAMPLE /* sample.hの内容をここに書く */ #endif のように書くのが定石のようですが、これが無いと、具体的にどういう場合に不具合が出るのでしょうか。

  • インクルードガードの命名の仕方

    質問です。 インクルードガードの際、インクルードガード名は自由に設定できるのでしょうか。 例えばheader.h内で以下のように設定します。 #ifndef COMMON_HEADER_H #define COMMON_HEADER_H このとき、COMMON_HEADER_Hはheader.hを指しますか。

  • c#のマクロ定義について

    C言語でマクロ定義の場合以下のようにヘッダファイルに#defineで定義しますが、C#の場合どのようにすればいいのでしょうか。 C言語の場合 *** test.h *** #define TEST 5 C#の場合 public const int TEST = 5; //これでいいの? 専用のclassを用意するの? 初歩的な質問ですが宜しくお願い致します。

  • 分割コンパイルの初歩

    C言語ですが、.hに実装を書くのは避けたほうが良いといわれます。 私は main.c define.h aaa.h bbb.h みたいなスタイルでコードを書いていました。 まずdefine.hでグローバル変数や、マクロなどの宣言を まとめて行い、ほかの.hやmain.cでも使えるようにして いました。 しかし、以下のような状況のとき、どのように分割すれば 良いのかが分かりません・・・。 たとえば、以下のように、マクロNUM、変数a,bをすべてのファイルで共有して使えるように分割コンパイルするにはどのようにコードを書き直せば良いのでしょうか? //--------------main.c------------------ #include "define.h" #include "aaa.h" #include "bbb.h" int main( void ){   printf("%d", a);   printf("%d", b);   printf("%d", NUM);   aaa();   bbb();   return 0; } //------------define.h------------------ #define NUM 100 int a = 10; int b = 20; void aaa( void ); void bbb( void ); //------------aaa.h------------------ void aaa( void ){   printf("%d", a);   printf("%d", b);   printf("%d", NUM); } //------------bbb.h------------------ void bbb( void ){   printf("%d", a);   printf("%d", b);   printf("%d", NUM); }

  • 数値が 2 のべき乗かどうか調べるマクロ

    define した値や変数値が、2 のべき乗かどうかを 関数ではなくマクロで簡単に評価できる方法はありますか。 例) #define BUFFERSIZE (2048) // OK //#define BUFFERSIZE (2000) // NG #if !(BUFFERSIZE が 2 のべき乗か調べるマクロ/評価式) # error コンパイルエラーメッセージ #endif assert(BUFFERSIZE が 2 のべき乗か調べるマクロ/評価式); buffer[idx] = data; if (BUFFERSIZE が 2 のべき乗か調べる) idx = ++idx & (BUFFERSIZE - 1); else { idx = ++idx % BUFFERSIZE; // idx = (idx + 1) >= BUFFERSIZE ? 0 : (idx + 1); } 上記の、日本語で書いてる部分を満たすマクロ (関数ではなく) は どういうふうにすればいいでしょうか。 よろしくお願いします。