【发布时间】:2016-05-01 20:10:57
【问题描述】:
在this SO question我遇到了一个非常奇怪的typedef:
struct Date {
int day, month, year;
} typedef date_s;
我一直看到typedefs 遵循这条“规则”:
typedef <existing> <new>;
例如:
typedef unsigned long long ull;
typedef int kph; // speed
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
typedef int int_t;
typedef char char_t, *char_p, (*fp)(void);
第4个取自here,第5个和第6个取自cppreference
而this 就是我的typedef struct:
typedef struct {
int a, b, c;
} data;
// and then use it
data Something;
问题是这怎么可能写出这样的typedef?这甚至没有意义(至少对我来说)。
clang 不会给出任何错误或警告,即使是 -Wall -Wextra。
额外问题:我是否应该建议问题的作者在哪里可以找到此代码避免使用这样的typedef(因为它非常不寻常并且可能导致混乱)?
【问题讨论】:
-
这很好,虽然不寻常。很像 int const i;
-
@piling 我更喜欢
int const i,而不是const int i。使用指针时不那么令人困惑,因为您只需要遵循一个一般规则:“const 之前的任何内容都是 const”。int const* i;比const int *i;简洁得多。 -
实际规则是它与声明变量相同,但将
typedef(几乎)放在任何地方都会使其声明类型别名而不是变量。为了清楚起见,人们通常把它放在前面