2012-03-12 6 views
1

次のプログラムをコンパイルすると、エラーexpected ‘;’ before numeric constant が発生します。私は間違って何をしていますか?予想される ';'数値定数の前

#include <stdio.h> 

#define GPIOBase 0x4002 2000 

uint32_t * GPIO_type(char type); 

int main(void) 
{ 
    GPIO_type('G'); 

    return 0; 
} 

uint32_t * GPIO_type(char type) 
{ 
    return (uint32_t *) GPIOBase; 
} 
+1

'gcc -E'を使用して、プリプロセッサのエラーを見つけて削除します。 – Eregrith

+0

@Eregrith:ありがとうございました – Randomblue

+0

アップして、この正確な問題に遭遇しました。しかし、私の場合、それはあまり明らかではなかった – Anonymous

答えて

6

問題がある:

#define GPIOBase 0x4002 2000

そして、あなたはそれを使用します。

return (uint32_t *) GPIOBase;

は次のようになります。

return (uint32_t *) 0x4002 2000;

はどれコンパイラエラー。 0x4002のあとに残っている野望2000があります。私はあなたが欲しい疑う:

マクロを展開

#define GPIOBase 0x40022000

4

問題は、この行です:

#define GPIOBase 0x4002 2000 

あなたはシンボルGPIOBase内だけで定数以上のものを定義しようとしています。定義を適用すると、関数は次のようになります。

uint32_t * GPIO_type(char type) 
{ 
    return (uint32_t *) 0x4002 2000; 
} 

これは有効なCコードではありません。

1

、正しいコードではありません

return (uint32_t *) 0x4002 2000; 

を取得します。

0

コードは意味をなさない。

あなたのコンパイラは、見ている:

uint32_t * GPIO_type(char type) 
{ 
    return (uint32_t *) 0x4002 2000; 
} 

違法Cの構文です。

関連する問題