5

我使用以下代码收到以下错误。我试图找出问题出在谷歌上,但我没有发现任何有用的东西。

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 ;volatile 仅适用于具体的变量定义。

所以在static struct cal cal,你的变量cal只是static,但不是volatile

从这个意义上volatile说,正如警告所说,声明是无用的。

于 2012-06-11T10:29:10.860 回答
0

volatile 键工作应与实变量一起使用,而不是与类型定义一起使用。

于 2012-06-11T11:27:03.703 回答
0

您不能将volatile限定符附加到struct声明中。

但是,与其他答案相反,您实际上可以在volatile类型上使用限定符,但不能structs上使用。如果使用typedef,则可以为结构创建 volatile 类型。

在下面的示例中,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 回答