我判断过了,这行得通:

long static int const unsigned my_variable = 123;

我知道这很愚蠢,但为什么我们一开始就有这样的可能性呢?

类型名称是多个单词的整个 idea 已经够糟糕的了,但现在我学到了允许以任何顺序排列并与其他限定符交织的单词?

任何学习C的unsigned int,const short的新手都会想,unsigned是一种类型,还是像const一样的某种限定词?那么有unsigned float个吗,等等.

所有这一切似乎比一些一个词的记号在所有类型中的明显使用都要复杂得多,比如uint,ulongint,这让我不禁要问,我是否正确理解了一些东西?

推荐答案

您可以这样做,因为标准说您可以这样做,而标准这么说是因为前标准实现允许这样做(尽管前标准实现没有将signed识别为关键字或long long识别为类型).请参阅C11 §6.7.2 Type specifiers ¶2:

每个声明中的声明说明符以及每个 struct 声明和类型名称中的说明符-限定符列表中应至少给出一个类型说明符.类型说明符的每个列表应该是以下多集之一(当每项有多个多集时,用逗号分隔);类型说明符可以以任何顺序出现,可能与其他声明说明符混合出现.

列表中给出的多集之一是:

long longsigned long longlong long intsigned long long int

措辞上的意思是你也可以使用

int long signed long

作为类型名称.这不是很好的练习,但你可以做到.

请注意,指定除第一个以外的任何位置的存储类都是过时的-§6.11.5 St或age class specifiers注:

将存储类说明符放置在声明中声明说明符的开头以外的位置是一项过时的功能.

这意味着您使用long static int const unsigned my_variable = 123;的示例使用的是过时的功能.最好使用:

static long int const unsigned my_variable = 123;

更好的做法是将类型信息放在连续的位置:

static const unsigned long int my_variable = 123;

static unsigned long int const my_variable = 123;

(两者都是合法的;我更喜欢第一种).你可以go 掉所有版本中的int,而不会影响意思.

C++相关问答推荐

函数指针始终为零,但在解除引用和调用时有效

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

修改pGM使用指针填充2-D数组但不起作用

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

如何设置指针指向在函数中初始化的复合文字中的整数?

将数据移动到寄存器时出现分段故障

错误Cygwin_Except::Open_stackdupfile:正在转储堆栈跟踪是什么?

tick.q中的Kdb+键控表语法

在C中访问数组中的特定值

通过k&;r语法的c声明无效

不使用任何预定义的C函数进行逐位运算

为四维数组中的Dim-1和Dim-3重新分配空间

如何使这个While循环在新行上结束

C语言中奇怪的输出打印数组

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

在Ubuntu上使用库部署C程序的最佳实践

在git补丁中自动添加C的宏

传递参数:C 和 C++ 中 array 与 *&array 和 &array[0] 的区别

使用fread()函数读取txt文件

可以从指针数组中的值初始化指针吗?