5

次のコードで次のエラーが発生します。Google のどこに問題があるのか​​を突き止めようとしましたが、役立つ情報は見つかりませんでした。

Compiling /home/tectu/projects/resources/chibios/ext/lcd/touchpad.c
In file included from /home/tectu/projects/resources/chibios/ext/lcd/touchpad.c:1:0:
/home/tectu/projects/resources/chibios/ext/lcd/touchpad.h:17:1: warning: useless type qualifier in empty declaration [enabled by default]

の12行目から17行目までのコードは次のtouchpad.hとおりです。

volatile struct cal {
    float xm; 
    float ym; 
    float xn; 
    float yn; 
};

そして、この構造体を内部で使用する方法は次のtouchpad.cとおりです。

static struct cal cal = { 
    1, 1, 0, 0  
};

誰か私に光を見せてくれませんか? :D

4

6 に答える 6

7

volatile修飾子は、構造の特定のインスタンスに適用できます。
あなたはそれを役に立たないタイプに適用していて、コンパイラはそれを正しく指摘しています。

于 2012-06-11T10:28:53.383 に答える
6

volatile型ではなく変数を修飾します。

行うこと:

static volatile struct cal {
    float xm; 
    float ym; 
    float xn; 
    float yn; 
} cal;

次のように合法です。

struct cal {
    float xm; 
    float ym; 
    float xn; 
    float yn; 
};

static volatile struct cal cal;
于 2012-06-11T10:30:08.840 に答える
5

キーワードはvolatileオブジェクトで意味があります。タイプ定義ではありません。

于 2012-06-11T10:28:12.673 に答える
5

エラーは発生せず、警告のみが発生します。

そして、それはあなたがあなたを宣言する方法に当てはまりますstruct cal:それ自体は揮発性ではありません。volatileは、具体的な変数定義にのみ適用されます。

したがって、static struct cal calでは、変数calはだけですがstatic、ではありませんvolatile

その意味で、volatile警告が言うように、宣言は役に立たない。

于 2012-06-11T10:29:10.860 に答える
0

揮発性キーの機能は、型定義ではなく、実際の変数で使用する必要があります。

于 2012-06-11T11:27:03.703 に答える
0

volatile修飾子をstruct宣言に添付することはできません。

しかし、他の回答とは対照的に、実際volatileには型には修飾子を使用できますが、structsには使用できません。を使用すると、構造体の volatile 型を作成できます。typedef

次の例でVol_structは、ポスターの質問のように、実際には揮発性ではありません。ただし、Vol_typeさらに修飾せずに volatile 変数を作成します。

/* -------------------------------------------------------------------- */
/* Declare some structs/types                                           */
/* -------------------------------------------------------------------- */

/* wrong: can't apply volatile qualifier to a struct
   gcc emits warning: useless type qualifier in empty declaration */
volatile struct Vol_struct
{
    int x;
};

/* effectively the same as Vol_struct */
struct Plain_struct
{
    int x;
};

/* you CAN apply volatile qualifier to a type using typedef */
typedef volatile struct
{
    int x;
} Vol_type;


/* -------------------------------------------------------------------- */
/* Declare some variables using the above types                         */
/* -------------------------------------------------------------------- */
struct Vol_struct g_vol_struct;                     /* NOT volatile */
struct Plain_struct g_plain_struct;                 /* not volatile */
volatile struct Plain_struct g_vol_plain_struct;    /* volatile */
Vol_type g_vol_type;                                /* volatile */
于 2013-08-07T16:47:27.017 に答える