• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>専用のclassを用意するの? static を追加して、定数 TEST を保持するのに「適切な」クラスが持てばよいでしょう。

関連するQ&A

  • 新規ソース内のマクロ定義が既存ソース内のマクロ定義と衝突しない策について

    C言語です。 Effective C++か何かで読んだ const int hoge = 3; const char *bar = "HOGEHOGE"; などを使用しようと思ったのですが、 C言語ではコンパイルする際に、 「関数の外では定数は宣言できません」?? のようなエラーが出てしまいました。 そこでこれらを使用するのは諦めて、 #define~を使って定数を使用しました。 (上記のようなエラーが出てしまうのは、 C言語の仕様上、文法がおかしいからだと 思います。そもそもC++に関する本に 載ってるtipsだし^^;) #defineを使用するように修正して、コンパイルする際に、 既存のソース上のマクロ定義(#define~)と名前が重複するものが いくつか見つかり、修正に手間がかかりました。 マクロ定義なので、スコープという概念は 適用されないと思うので、既存のソースと新規のソースで マクロ定義がバッティングしないようにする策としては どのようなものがあるでしょうか? 今のところ思いつくものとしては以下です。 ・新規のソースに関するキーワードをプリフィックスとして使用する ・新規のソースの末尾で#undefをする。(これは試してないので有効か  どうか自信がありません。) 他に何か有効な策がありましたら教えてください。 よろしくお願いいたします。

  • C# 定数定義

    c#での定数定義についてですが、定数用のclassを定義したのですが この場合、定数を使用する各classで継承をしなくてはいけないですが、もっといいやり方等があれば教えてください。 public abstract class define { public const short NET_BUFF = 1024; } class testMain:define {     :     :

  • c++におけるtemplateについて

    c++の自作templateを関数宣言部と関数定義部とで、ファイルを分割する事を考えているのですが、エラーが出てtemplateをincludeすることが出来ないでいます。 例えば、 <ファイル:test.H> #ifndef test_H #define test_H #include <iostream> template<class T> class test { private: int row_, col_; public: test( int , int ); }; #endif <ファイル test.C> #include "test.H" template<class T> test<T>::test(int a, int b) :row_(a), col_(b) { std::cout << "コンストラクター" << std::endl; } <ファイル main.C> #include "test.H" #include<iostream> int main() { test a( 3, 3) return 0; } のようにtemplateファイルを分割した場合、 undefined reference to `test<double>::test(int, int)' collect2: ld returned 1 exit status のようなエラーがでます。 書籍:新c++言語入門・シニア編(下)の29章には「export」を関数定義部に付ければ良いような記述がありましたが、エラーを解決することが出来ませんでした。 main.Cにて、test.Cをインクルードするとこの問題を回避することが出来るのですが・・・。 そもそもtemplateは上記のように宣言部と定義部とを別々のファイルにすることはできないのでしょうか?

  • C言語でヘッダファイルを自作する

    C言語で#defineを用いてヘッダファイルを作成したのですが、 作成したコンパイルするときにヘッダファイルがオープンできません。 参考にしている資料があるのですが、そこに書かれているサンプルプログラムを 丸ごとコピーして作ったプログラムも同様にヘッダファイルがオープンできない というエラーが出るので、ヘッダファイルを定義する方法そのものが間違っていると 思うのですが、どこが間違っているのでしょうか? よろしければ正しい記述方法もお教えください。 #include <stdio.h> #if !defined SAMPLE_H #define SAMPLE_H wa(int a, int b) { return a+b; } #endif #include "sample.h" int main(){ printf("%d\n",wa(40,70)); return 0; } ヘッダファイルの定義の方法は他にもあるとは思いますが、 今回は#defineを用いた方法でお願いします。

  • マクロ内での変数定義

    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のログ表示 */ }

  • C#について

    お世話になります。 今までUNIX-Cをやってましたが今度仕事でC#を使用することになりました。そこでC#の勉強に役立つ書籍やサイトがあれば教えてください。  初歩的な質問ですが、c#では、#defineでの数値などの定義が出来ないようですがそれらのマクロ定義はどうするのでしょうか。  また、ヘッダーファイルに相当するものなどはあるのでしょうか。

  • HDCのマクロ定義

    VC++を勉強しているのです。 HDCハンドルの定義を遡って確認したら、インクルードファイルWINDEF.HとWINNT.Hに次のような定義を見かけました。 DECLARE_HANDLE(HDC); #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name そのマクロ定義の解析と意味、良く分からないのです。何方が教えて頂けるでしょうか。

  • CやC++に今後追加して欲しい機能ってありますか?

    個人的にC言語はC++があるので今のままでいいと思いますが、 C++には class Test_c {  static const int VarI = 10; //これは従来もOK  static const float VarF = 10.5; //これは整数以外なのでアウト  static const char * Str1 = "テスト文字列" //これもアウト public: } 見たいにフィールドで整数以外のstatic constもできるようにして欲しいです。

  • なぜマクロ「_WIN64」が未定義になるの?(Visual C++)

    下記環境で、32bitアプリケーションの64bit化をしようとしました。   OS    :Windows XP Professional x64 Edition   開発環境:Visual Studio 2008 Professional Edition   言語   :Visual C/C++ その際のビルドは、構成マネージャのアクティブソリューションプラットフォームを「x64」に設定してから行いました。 ところが、64bitアプリケーションなら定義されるはずの「_WIN64」というマクロが未定義になってしまいます。 なぜなのか、教えて欲しいです。 ちなみに、マクロが未定義かどうかは、   #if defined(_WIN64)     #define test   #endif の2行目がビルド後、灰色表示になるかどうかで確かめました。 その結果、灰色になりました。 さらに、補足ですが 64bitアプリケーションになっているかを確かめるため、 sizeof(int*)の値を確認したところ、 その値は「8」でした。 参考:   [MSDN Visual C++ デベロッパー センター]    http://msdn.microsoft.com/ja-jp/library/b0084kay.aspx    http://msdn.microsoft.com/ja-jp/library/9yb4317s(VS.80).aspx

  • classの再定義エラーについて

    C++初心者で初歩的な質問ですがよろしくお願いします。 【内容】  <test.h>  class testを定義  <test2.h>  class testを継承したclass test2を定義  <test3.h>  class testを継承したclass test3を定義  <test4.h>  class test2とclass test3で作成したインスタンスをメンバに持つclass test4を定義 【問題】  test2.hとtest3.hではclass testを継承するために#include "test.h"をしています。そして、test4.hではclass test2とclass test3を使うため#include "test2.h"、#include "test3.h"をしているのでredefinition of 'class test'というエラーが発生します。  このようなエラーを発生させずに上記の内容のものを実現させることは出来るのでしょうか?  ちなみにOSはTurboLinux8でコンパイラはg++です。よろしくお願いします。

専門家に質問してみよう