マクロの再定義エラーについて

このQ&Aのポイント
  • 質問文章のコンパイル時に'ff'マクロが再定義されましたというエラーメッセージが表示されます。
  • OSはWin2000、コンパイラはVC++ 6.0を使用しています。
  • 以前は同様のエラーが発生し、#elseを使用せずに全体を書き直しました。なぜ再定義されるのかがわかりません。
回答を見る
  • ベストアンサー

#if

#if defined(DECRYPTION_KEY_SCHEDULE) #if DEC_ROUND == NO_TABLES #define ff(x) (x) #else #define ff(x) inv_mcol(x) #ifdef dec_imvars #define d_vars dec_imvars #endif #endif 上の部分をコンパイルすると、 'ff'マクロが再定義されました というエラーメッセージが出るのですが、 なぜ再定義になるのか分かりません。  OS:Win2000 コンパイラ VC++ 6.0 以前は、同じようなエラーが出て、 #else を使わないで全て書き直しました。  よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

#if   の個所数…3 #endif の個所数…2 これかな? #endifを一行追加したらちゃんと通りました。

uyama33
質問者

お礼

有り難うございます。  他の場所にも #endif が沢山ありますので、数えます。  プリコンパイル済みのヘッダーの検索中に 予期しないEOF を検出しましたとのメッセージが出ますので こちらが原因かも知れません。

uyama33
質問者

補足

#include "stdafx.h" をcppファイルの先頭に全て入れたら 直りました。 変なエラーメッセージでした。

関連するQ&A

  • #ifdef の使い方

    組み込み系のプログラムを現在勉強しています。 #ifdefについて質問させて頂きます。 下記コードの場合 #ifdef A ---- (1) Y = Z; #else -----#if B ------- (2) X = Z; ----#endif #endif ("-"は空白と思ってください。) この場合、Aが定義されていれば(1)が実行しコンパイル終了(#endif)。 Aが定義されていない場合、#else に行き、Bが定義されている場合は (2)を実行してコンパイル終了(#endif)という理解であっていますか? またこうした方が分かりやすいなど、アドバイス頂けると幸いです。 ご返答よろしくお願いします。

  • PICC  ビルドトラブル

     宜しくお願いします。  あるソースファイル(net から入手)を ビルド しましたら 次のような メッセージ が 出ました。 これは どうしてでしょうか。 usart.h の 情報 も コピー します。  Error [141] C:\Users\tadao\Desktop\1207\0702_3.c; 3.18 can't open include file "usart.h": No such file or directory  #ifndef _SERIAL_H_ #define _SERIAL_H_ #define BAUD 9600 #define FOSC 4000000L #define NINE 0 /* Use 9bit communication? FALSE=8bit */ #define DIVIDER ((int)(FOSC/(16UL * BAUD) -1)) #define HIGH_SPEED 1 #if NINE == 1 #define NINE_BITS 0x40 #else #define NINE_BITS 0 #endif #if HIGH_SPEED == 1 #define SPEED 0x4 #else #define SPEED 0 #endif #if defined(_16F87) || defined(_16F88) #define RX_PIN TRISB2 #define TX_PIN TRISB5 #else #define RX_PIN TRISC7 #define TX_PIN TRISC6 #endif /* Serial initialization */ #define init_comms()\ RX_PIN = 1; \ TX_PIN = 1; \ SPBRG = DIVIDER; \ RCSTA = (NINE_BITS|0x90); \ TXSTA = (SPEED|NINE_BITS|0x20) void putch(unsigned char); unsigned char getch(void); unsigned char getche(void); #endif  C:\Users\tadao\Desktop\1207  以上 宜しくお願いいたします。 0256  

  • Verilog_HDLでのdefineとifdef

    yahooやgoogleで念入りに調べたつもりですが、自分の求めているようなHPは見つからなかったので、こちらの掲示板に記載させて頂きます。 すみませんが、誰かVerilog_HDLに詳しい方ご教授願いますでしょうか。 (1)「define」と「parameter」の用途の違いについて。 (2)「`ifdef」文と「if」文の用途の違いについて。 (3)「ifdef」の"def"は「define」の意味でしょうか。 -「define」の意の場合、「`ifdef <define_name>」のように<>の記述はdefineで定義された変数しか使用できないのでしょうか。 (4)下記例のように"test1/2"に定義値を持たせない場合は、どのようにして"test1/2"に値をアサインすれば宜しいのでしょうか。 サンプル記述例) `define test1 //定義値なしのdefine `define test2 `ifdef test1 //test1を真・偽させたい。 ------ `elsif test2 //test2を真・偽させたい。 ------ `endif (5)「ifdef」や「task」は、合成目的ではないテストベンチ等に使用するものと思っていましたが、「ifdef」や「task」を用いて組み合わせ回路等を開発したりするのでしょうか。 以上です。 すみませんが何方か宜しくお願いします。

  • 正常時のログ出力方法(#ifdef DEBUGLOG使用)

    ret = syori(); if(ret != 0){ /* 異常終了(≠0)時 */ printf("error\n"); } という処理があった場合、defineでDEBUGLOGを定義している時は正常終了のメッセージを出すようにしたいと思っています。 そこで質問なのですが、 1.以下のような処理にすると問題があるのでしょうか?「else」の部分があまり好ましいと思えなくて・・・ ret = syori(); if(ret != 0){ /* 異常終了(≠0)時 */ printf("syori() エラー発生\n"); } #ifdef DEBUGLOG else { printf("syori() 正常終了\n"); } #endif 2.1.で記述した方法よりスマートな方法・より良い方法がありましたら教えていただけないでしょうか? よろしくお願いします。

  • Shemeで掛け算の関数

    Shemeで掛け算の関数 関数muliを定義しなさい。ただしzero,inc,dec,add,mulはすでに定義されて、 muliはmulの中から(mulli x y (zero))と呼ばれる。 なんとなくわかるかもしれませんが、 (define (dec n) (cdr n)) (define (zero) (quote())) (define (add x y) (if (null? y) x (add (inc x) (dec y)))) となっています。 この問題で (define muli (lambda (x y n) ((if (null? y) n (muli x (dec y) (add n x)))))) と考えたのですがうまくいきません。 ご教授よろしくお願いします。

  • Cで書かれたコードの文字マクロ部分がわかりません。

    下記に示す、Cのサンプルプログラムの文字マクロの部分がわからず、困っています。 ソースの実行環境の違いを吸収するための部分であることはわかるのですが、どうしてこのようにて定義されたのかがわかりません。 特に、 ●__MINGW32__とは何か? ●#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)のところで、なぜ||と&&を併用しているのか。&& !defined(__MINGW32__)がどうして必要なのか? ●C##UI64、C##UL、C##ULLはそれぞれ何なのか? ●__arch64__は何か?なぜ必要なのか? ●なぜ、下のソース(文字マクロ部分)のdefineの流れになったのか? のあたりがわかりません。よろしくお願いします。 ---------------------------------------------------------------------- #if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) typedef unsigned __int64 u64; #define U64(C) C##UI64 #elif defined(__arch64__) typedef unsigned long u64; #define U64(C) C##UL #else typedef unsigned long long u64; #define U64(C) C##ULL #endif ----------------------------------------------------------------------

  • #ifdef多用でソースが見づらい

    #ifdefを多用しているがソースがあり、 非常にソースが見づらいのですが、 適当な#ifdefを指定すると、有効になる箇所のみ 表示してくれるようなツールはありますでしょうか? (無効な箇所がグレー表示になるなどでも結構です) ---------------------------- #ifdef _YUUKOU_ println("YUUKOU"); #else println("MUKOU"); #endif ... #if 0 println("MUKOU"); #else println("YUUKOU"); #endif ----------------------------  ↓↓↓↓↓ ---------------------------- println("YUUKOU"); ... println("YUUKOU"); ---------------------------- よろしくお願いします。

  • コンパイル時のスイッチについて

    C言語初心者なので申し訳ありませんが,コンパイル時のスイッチについて困っております. 現在, #define tmp ... #ifdef tmp  関数1 #else  関数2 #endif とtmpを定義して切り替えようとしております. 現在コンパイルの切替は,毎回 //#define tmp とコメントアウトして切り替えているのですが, gcc等のコンパイラのコマンドラインから 切り替える方法はあるのでしょうか. 色々調べたら, cc -D tmp みたいな?感じにするのかと思ったのですがうまくいきません. 初歩の質問ですがご教授よろしくお願いします.

  • X86/MIPSクロス環境での開発

    X86/MIPSクロス環境でソフトを開発している者です。 ネットで検索したところ、 #ifdef __mips__ ~MIPS環境での処理~ #else ~X86環境での処理~ #endif とすれば切替えられそうなことが分かりました。 でも、このプリプロはどこで定義されているのでしょうか。 未定義の環境があると他の手段を考える必要がありますよね? 御存じの方、ご教授よろしくお願い致します。

  • 構文エラーについて

    extern void __byte_order_change(int, int, byte_t*, int) attribute_hidden ; #define __byte_order_to_host(b,p,l) __byte_order_change(b, __STDF_HOST_BYTE_ORDER, p, l) #define __byte_order_to_src(b,p,l) __byte_order_change(__STDF_HOST_BYTE_ORDER, b, p, l) プロンプトでコンパイルしようとすると、上記プログラムの1行目で以下のようなエラーが出ます。 c:\users\10044709\desktop\ttプロジェクト\stdf\libstdf-0.4\src\dtc.h(19) : error C2061: 構文エラー : 識別子 'attribute_hidden' c:\users\10044709\desktop\ttプロジェクト\stdf\libstdf-0.4\src\dtc.h(19) : error C2059: 構文エラー : ';' また、VSで開いてみると、【attribute_hidden】は『'{'が必要です』と表示され、 extern voidの後の【__byte_order_change】には 『名前のないプロトタイプパラメータには、本体が存在する場合は使用することはできません』と 表示されます。 ちなみに【attribute_hidden】の定義先は以下の通りですが、VS上ではエラーは出ていません。 # if !defined(attribute_hidden) # define attribute_hidden __attribute__ ((visibility ("hidden"))) # endif #else # define attribute_unused # if !defined(attribute_hidden) # define attribute_hidden # endif #endif エラーNo.で検索しても原因がよく判らず、 是非とも教示頂きたく、何卒宜しくお願い申し上げます。

専門家に質問してみよう