相关疑难解决方法(0)

typedef struct vs struct definitions

我是C编程的初学者,但我想知道typedef在定义结构时使用与使用结构之间有什么区别typedef.在我看来,实际上没有区别,他们实现了同样的目标.

struct myStruct{
    int one;
    int two;
};
Run Code Online (Sandbox Code Playgroud)

typedef struct{
    int one;
    int two;
}myStruct;
Run Code Online (Sandbox Code Playgroud)

c struct typedef

763
推荐指数
10
解决办法
66万
查看次数

`typedef struct foo {int bar};`的合法性

这个问题来自问题是结构{...}; 一个类型或一个未命名的变量?

在那个问题上,OP询问了一下

typedef struct student_s {
    char* name;
    int age;
    double height;
    struct student_s* next;   
};
Run Code Online (Sandbox Code Playgroud)

我问的是上述的合法性.编译包含上述代码的代码时,是否需要诊断(或使其更简单typedef struct foo {int bar;};)?

我的看法是合法的,从语言律师的角度来看,不需要诊断.(旁白:我不主张使用它.它非常值得诊断.如果我错误地编写了如上所述的代码,我非常希望编译器警告我.)


C11标准的第6.7节规定了声明的语法:declaration-specifiers init-declarator-list opt ;请注意,init-declarator-list是可选的.这可能导致人们认为这typedef int;是有效的.这不是因为标准也说明了这一点

除static_assert声明之外的声明应至少声明声明符(除函数的参数或结构或联合的成员之外),标记或枚举的成员.

因此typedef int;,typedef struct {int bar};它们是非法的,因为它们不声明声明者,标记或枚举的成员.

另一方面,在我看来,这typedef struct foo {int bar;};是合法的,因为它确实声明了一些东西.特别是,它声明并定义struct标记foo.

以上推理是否正确?

c struct typedef language-lawyer

6
推荐指数
1
解决办法
211
查看次数

什么typedef没有类型意味着什么?

从标准N1570 6.7.8:

一个typedef声明不引入新的类型,只为使指定类型的代名词.

所以我预计不可能这样写:

typedef t;
t *t_ptr;
Run Code Online (Sandbox Code Playgroud)

它应该无法编译,因为没有类型来引入提供的同义词.但它很好:演示.这是什么意思,为什么编译?

c typedef

3
推荐指数
1
解决办法
157
查看次数

gnu gcc如何禁止警告:在此声明中忽略'typedef'[默认启用]

我在Fedora 16上使用GNU gcc 4.6.2.我正在使用第三方API编写应用程序,在编译之后,我收到了很多警告.

warning: ‘typedef’ was ignored in this declaration [enabled by default]
Run Code Online (Sandbox Code Playgroud)

只是想知道如何压制这个?我用-Wall标志编译我的程序.

在本文档http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html中,它提到了类似-Wunused-local-typedefs的内容.

我尝试过-Wno-unused-local-typedef,但不起作用.

谢谢.

c++ gcc warnings gnu

2
推荐指数
3
解决办法
2万
查看次数

标签 统计

c ×3

typedef ×3

struct ×2

c++ ×1

gcc ×1

gnu ×1

language-lawyer ×1

warnings ×1