• ベストアンサー

#define hoge long longって正しいでしょうか?

いつもお世話になっておりますm(__)m 表題の件なのですが、 #define hoge long long とやって、hoge型は、long longで置き換えてねー って書いた場合、 C言語の場合、正しいのでしょうか? あるいは、longとlongの間が空いてちゃダメなのでしょうか? 質問のきっかけは、 #define hoge long long 中略 typedef struct _hogehoge { long long val; 中略 } hogehoge; のようなヘッダーファイルを含む あるプログラムをビルドした際に、 error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。 というエラーが出たためです。 どなたかご教授の程、よろしくお願い致します。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.2

> C言語の場合、正しいのでしょうか? お使いのコンパイラーは何ですか? お使いのコンパイラーが long long 型に対応していれば、正しいです。 > error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。 このエラーが出るということは、お使いのコンパイラーが long long 型に対応していないのではないでしょうか?

micchicchi
質問者

お礼

うおおおおお!!!! なんと見事な回答>< しかも、asuncion様、三度もお世話になり… 氷解しました~ まだ、専用のコンパイラー買ってなくて、 シュミレーターだけでプログラムってたのです。 そうかそうか! 経験ってすごいですね! ありがとうございましたm(__)m

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

long long は C99 だから, この規格に対応してないコンパイラだとダメかもね.

micchicchi
質問者

お礼

Tacosanさん、ありがとうございます。 納得了解です! 今後もご贔屓の程m(__)m

関連するQ&A

  • 自己参照構造体のtypedef宣言とスコープ

    MinGWとgccでプログラムを組んでいます(OSはWin7です)。 main.cpp、variable.h、function.hの3つのファイルからなり、 variable.hで自己参照構造体とそれのtypedef宣言をしています。 以下のような感じです。 ************************* typedef struct hoge HOGE; struct hoge{ int a,b; double x,y; HOGE *p1, *p2; } ************************* そのあとfunction.hでこのHOGE型のポインタを受ける関数を宣言しています。 void hogehoge(HOGE *p1, HOGE *p2); これをmain.cpp内で、variable.h、function.hの順に読み込んでいます。 そして、コンパイルエラーがでます。 error: unknown type name 'HOGE'(これがずらっと) typedefのスコープの関係なのか、それ以外の問題なのか。 煮詰まっています。アドバイスお願いいたします。m(_ _)m

  • 相互に参照する構造体について

    Cプログラミングについての質問です。よろしくお願いします。 以下のヘッダファイル(defx.h, defy.h)および、mainファイルが正しくコンパイルされるということなのですが、自分の環境(WinXP下でのgcc(MinGW))ではエラーが出ます。 エラー内容は error: redefinition of typedef 'SY' error: previous declaration of 'SY' was here error: redefinition of typedef 'SY' error: previous declaration of 'SY' was here です。 <defx.h> #if !defined(__SX) #define __SX typedef struct __sy SY; typedef struct { int a; SY *b; } SX; #endif <defy.h> #if !defined(__SY) #define __SY #include "defx.h" typedef struct __sy { int c; SX d; } SY; #endif mainファイルについては #include "defx.h" #include "defy.h" int main(void) { SX s; SY t; } 以上ですが、 よろしくお願い致します。

  • Objective-Cで構造体を配列や辞書に登録するにはどうしたら良い

    Objective-Cで構造体を配列や辞書に登録するにはどうしたら良いですか? 構造体のままだと、NSArrayやNSDictionaryに登録できないので、 オブジェクトにしたいです。 例えば、 typedef struct { long long timeValue; long timeScale; long flags; } QTTime; のような構造体から、オブジェクト(hoge)を作って、 NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:hoge, @"hoge",nil]; のように辞書に突っ込みたいんです。 以上、宜しくお願いいたします。

  • 任意の型のポインタを格納する場合

    構造体にて、任意の型のポインタを指定できるアドレス格納変数を作成し(下記 hoge_tのメンバaa) そこに任意の型(下記fuga1_t、fuga2_t)を指定できるようにしたいと思っております。 下記コードにて所望の動作ができておりますが、こういう場合はこういう書き方をするものだ、 というものがあればお教え下さい。 (または下記記載の通りで正しい場合はこの書き方で問題ない、などいただけると助かります) #include <stdio.h> ///////////////////子struct typedef struct{ long num; long test; }fuga2_t; typedef struct{ int num; int test; }fuga1_t; ////////////////////親struct typedef struct{ int *aa; //ここにfuga1、fuga2両方設定したい場合がある }hoge_t; int main(void){ hoge_t hoge1; hoge_t hoge2; fuga1_t fuga1; fuga2_t fuga2; //初期化 fuga1.test = 10; fuga2.test = 11; //代入 hoge1.aa = (int*)&fuga1; hoge2.aa = (int*)&fuga2; printf("%d \n", (((fuga1_t*)(hoge1.aa))->test)); printf("%ld \n", (((fuga2_t*)(hoge2.aa))->test)); return 0; }

  • 既定のコンストラクタがない?

    次のコードをビルドすると 「error C2512: 'Hoge' : クラス、構造体、共用体に既定のコンストラクタがありません。 」 とでるのですが、なぜそのようになるのかわかりません。 環境はVC8、XP sp2 になります。 struct Boo {int handle_;}; struct Hoge { Hoge(Boo&){} }; int main() { Boo boo; Hoge( boo ); } これは一体どういうことなのでしょうか? ご教授よろしくお願いします。

  • ヘッダファイルと構造体

    typedef struct{ float x; float y; float z; }Point; typedef struct { struct Point p1; struct Point p2; }Rect; とヘッダファイルに入力しコンパイルしてみると struct Point p1; struct Point p2; のPointが未定義の構造体とエラーが出ます。 どのように書けばいいのでしょう??

  • VC6でlong longでエラー?

    VC++6で、void test(unsigned long long a){} の場所で、error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。というエラーが発生します。 unsigned long longはVCで動作するものでしょうか?

  • ヘッダファイルの有効範囲

    現在OpenGLを使ったプログラムを作っていて, hoge.hというヘッダファイルで #include <GL/glut.h> piyo.hというヘッダファイルには #include "hoge.h" そしてさらにhogehoge.hというヘッダファイルに #include "piyo.h" として, hogehoge.cppのソースファイルにて #include "hogehoge.h"してOpenGLの関数を使おうとしたら エラーが出ました. hogehoge.cppでhogehoge.hをインクルード →hogehoge.hでpiyo.hをインクルード →piyo.hでhoge.hをインクルード →hoge.hでGL/glut.hをインクルード というように,橋渡し的にインクルードはできないのでしょうか? これはこのような仕様なのでしょうか? それとも他に誤りがある可能性があるのでしょうか… 非常に困っております. ご回答お待ちしております.

  • ヘッダーファイルでは、他のヘッダーファイルをインクルードできないのか

    Javaを仕事で使っています。 最近趣味でC++を始めました。色々形式の違いに戸惑っています。 C++では関数を宣言しなければならないので、クラス名と同じヘッダーファイルにそのクラスで使う関数を宣言して、それをインクルードしています。 そこで今、壁にぶちあたりました。 あるクラス(仮にFooとします)の関数で、他のクラス型(Hogeとします)を引数に取りたいので、ヘッダーファイルにそれを宣言しようとしているのですが、コンパイルエラーになってしまいます。 Foo.hは以下のような感じ。 #include Hoge.h 中略 GetHoge(Hoge hoge); コンパイルエラーでは error C2011: 'Hoge' : 'class' 型の再定義 などと言われます。 クラスとその同名のヘッダーファイル、という形式を変えずに 他のクラス型を引数にとる関数を作るには、どうしたらよいのでしょうか? C++に関しては全くの素人です。詳しい方、ご教示願います。

  • C++/CLIでネイティブの構造体を使用したい

    すみません。C++の初心者です。 C++/CLIフォームアプリケーションで関数の呼出し画面を作成しています。 既にある(C++ネイティブで作成済み)のヘッダファイルをプロジェクト上にコピー、追加して ヘッダファイル内に書かれている構造体を使用したいのですが、 出来ないのでしょうか? ヘッダファイル(xxx.h)内には以下のような構造体が作成されています。 typedef struct { double pq_base; int iter_max; double eps; int chi_set_flg; int bad_rmv_flg; int obs_slk_flg; int obs_before_flg; int calc_pf_flg; double *chi_val_95_0; double *chi_val_97_5; double *chi_val_99_0; }s_SE_SET; C++/CLIのプロジェクト内にこのヘッダファイルを追加して フォーム内のあるボタンを押された時に、この構造体を参照させてあげたいのですが、 以下の様に構造体変数を定義して s_SE_SET se_set; ビルドを行うと以下のエラーが出ます。 error C4368: 'se_set' をマネージ 'se_project::Form1' のメンバーとして定義できません。 混合型はサポートされていません C++/CLIではネイティブで定義された構造体は使用出来ないのでしょうか? なにか方法が有るとすればその方法を教えて頂けると嬉しいです。 どなたかご教授頂けませんでしょうか。 よろしくお願い致します。

専門家に質問してみよう