- ベストアンサー
c#のマクロ定義について
- みんなの回答 (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++・C#
- 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++・C#
- 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・C++・C#
- 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
- ベストアンサー
- C・C++・C#
- 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++です。よろしくお願いします。
- ベストアンサー
- C・C++・C#