c99相关内容

如何将字符串文字与4的倍数对齐?

我想确保给定的字符串文字以2的倍数或更好的4的地址结尾。 是否有任何的方法,最好不使用任何编译器特定的扩展? 我想这样做,因此字符串地址的最低位是0,可以用作标签位。 p> 解决方案 在C99中,您可以使用联合来完成此操作,例如 #define ALIGNED_STR_UNION(N,S)const union {char s [sizeof S]; int align ..
发布时间:2020-09-28 04:20:59 其他开发

可以使用输出到FILE *的输出例程在C语言中构建字符串吗?

我对这个问题的答案是“否”感到很难过,但是我想把这个问题扔掉,以防任何人有任何聪明的主意。 我有一组输出例程,它们采用复杂的数据结构并以文本格式打印。他们的原型如下: void print_mystruct(struct mystruct * s,FILE * stream) 我是这样写的,这样我就可以高效,缓冲地输出到终端,文件,到网络等。 不幸的是,我无 ..
发布时间:2020-09-28 04:20:55 其他开发

C预处理程序语句是否是C语言的一部分?

我记得我的一位教授在C语言入门课程中提出了一个要求。他表示, #define 预处理程序命令使程序员能够创建一个常量以供以后的代码使用,并且该命令是C语言的组成部分。 / *这是真正的C代码吗? * / #define FOO 42 由于这是入门编程班,我怀疑他只是简化了源文件和编译器之间的关系,但是尽管如此,我还是想验证一下我的理解。 预处理器语句是否完全 ..
发布时间:2020-09-28 04:20:52 其他开发

使用不确定的值还是使用自动存储对象中存储的那些不确定值?

根据C99 J.2,在以下情况下行为未定义: 在以下情况下使用具有自动存储持续时间的对象的值:它是 不确定的 在其他所有情况下,对象具有不确定的值怎么办?如果使用它们,是否还会始终调用UB?还是仅在它们包含陷阱表示形式时才调用UB? 示例包括: 使用 malloc (7.20.3.3p2) [存储在非自动存储中]分配的对象的值在调用 fclose 后调用 FILE * ..
发布时间:2020-09-28 04:20:48 其他开发

C中不完整类型和对象类型的定义是什么?

C中不完整类型和对象类型的定义是什么?另外,您能提供每个示例的例子吗? ANSI C99在不同地方都提到了两个类型类别,尽管我发现很难理解它们各自的含义。 (没有明确定义它们的段落/句子)。 解决方案 让我们转到在线C标准(n1256草稿): 6.2.5类型 1存储在对象中或由函数返回的值的含义取决于用于访问它的表达式的 类型。 (声明为对象的标识符是最简单的这样的表达 ..
发布时间:2020-09-28 04:20:45 其他开发

如何在没有警告的情况下在C99中使用ftruncate

我想在代码中使用ftruncate函数。我必须使用选项std = c99进行编译。我得到警告: 在函数“ test”中: 警告:函数“ ftruncate”的隐式声明[-Wimplicit功能声明] 我想在互联网上找到可以解决此问题的任何解决方案,但我 我使用ftrucnate是因为我想在锁定(锁定)后清除打开的文件的内容。 解决方案 由于 ftrunca ..
发布时间:2020-09-28 04:19:41 其他开发

const数组const {}

因此,您可以执行以下操作: void foo(const int * const pIntArray,const unsigned int size); 其中说来的指针是只读的,指向的整数是只读的 您可以在函数内部访问此代码,如下所示: blah = pIntArray [0] 您还可以执行以下声明: void foo(co ..
发布时间:2020-09-28 04:19:38 其他开发

UINT32_C和uint32_t之间的区别

据我所知 uint32_t 中的后缀 t 表示 t 类型,但我想知道 C是什么在 UINT32_C 中有什么区别? 解决方案 UINT32_C 是一个宏,它定义类型为 uint_least32_t 的整数常量。例如: UINT32_C(123)//可能在uint_least32_t为无符号long //的系统上扩展为123UL //如果uint_least32_t是unsign ..
发布时间:2020-09-28 04:19:31 其他开发

有理由避免使用位域结构成员吗?

我很早就知道C中有位域,偶尔我会用它们来定义密集的结构: typedef结构Message_s { unsigned int标志:1; unsigned int通道:4; unsigned int信号:11; }消息; 当我阅读开放源代码时,我经常会发现要存储的位掩码和移位操作并在手卷位字段中检索此类信息。这是如此普遍,以至于我认为作者并不了解位域语法,因此我 ..
发布时间:2020-09-28 04:19:27 其他开发

为什么sizeof(x)++可以编译?

我遇到了以下代码段: int a = 3; printf(“%d”,sizeof(a)++); 显然,这将使用GCC 9.3.0和-std = c99进行编译。 无法编译: printf(“%d”,sizeof(3)++); GCC打印错误 错误:作为增量操作数所需的左值 在我编写第一个代码片段之前,我 ..
发布时间:2020-09-28 04:19:23 其他开发

标准C是否需要文字后缀?

已经有一个问题可以回答变量声明的特殊情况,但是其他文字常量用法又如何呢? 例如: uint64_t a; ... int32_t b = a / 1000000000; 最后一段代码是否等效于任何标准C编译器中的下一个代码? uint64_t a; ... int32_t b =(int32_t)(a / UINT64_C(10000000 ..
发布时间:2020-09-28 04:19:12 其他开发

格式与文件内容不匹配时fscanf的行为

如果文件内容与传递给 fscanf 的格式字符串不匹配,则在下一次调用 fscanf ? 假设文件包含以下两行: 9000猪狗 4 5 2 程序试图解析打开的文件( fp )如此: int a = 1,b = 1 ,c = 1; int x = 1,y = 1,z = 1; fscanf(fp,“%d%d%d”,& a,& b,& c); ..
发布时间:2020-09-28 04:18:08 其他开发

scanf不超过缓冲区溢出

我有一个缓冲区,我不希望用户输入的字符超出缓冲区可以容纳的字符数(以避免缓冲区溢出)。 我正在使用 scanf 并执行以下操作: 字符缓冲区[30] = {'\0'}; scanf(“%30s”,缓冲区); 但是,如果用户输入的字符数超过30,我知道我会受到保护。但是,如果用户输入超过30,缓冲区将以null终止吗? 解决方案 scanf()带有“%s ..
发布时间:2020-09-28 04:18:05 其他开发

在对C99的阵列大小的实际好处上,“保证”是指对C99的阵列大小进行“保证”。功能参数的功能?

C99引入了新的函数参数表示法,其中 static 关键字可用于指定该参数至少包含N个元素。 6.7.6.3函数声明符,p7 将参数声明为“类型数组”应调整为 “类型的合格指针”,其中类型限定符(如果有)是在数组类型派生的[和]中指定的那些限定符。如果 关键字static也出现在数组类型 派生的[和]中,则对于函数的每次调用,对应的 实际参数的值应提供对第一个参数的访问。数组的 ..
发布时间:2020-09-28 04:18:03 其他开发

C工会从一开始就不会填充过吗?

在C99标准中,是否有任何保证只能将struct像结构那样最后填充工会?并且相关地,联合会的地址是否始终等于其任何可能的成员的地址? 解决方案 是。如您所述,结构永远不会有领先的填充。联合的地址始终指联合的任何组成部分的第一个元素(带有适当的强制转换),因此联合的开始也不能有填充。 是。适当地强制转换,联合的地址也是联合中任何元素的指针。 ISO / IEC 9899:20 ..
发布时间:2020-09-28 04:17:01 其他开发

C99不支持函数重载是有原因的吗?

显然(至少根据 gcc -std = c99 而言),C99不支持函数重载。不支持C中某些新功能的原因通常是向后兼容,但在这种情况下,我无法想到一种情况,函数重载会破坏向后兼容性。不包含此基本功能的原因是什么? 解决方案 要了解为什么您不太可能看到C重载,它可能有助于更好地了解C ++如何处理重载。 在编译代码之后,但在准备运行之前,必须链接中间的目标代码。这会将编译后的函数和其他对 ..
发布时间:2020-09-28 04:15:59 其他开发

错误:格式未知的转换类型字符“ l”-长扫描长

我正尝试使用标准IO功能 scanf 从控制台获取长。我从%lld 开始: scanf(“%lld”, & rule); 该抛出: 错误:格式为[-Werror = format =] 的未知转换类型字符“ l” 我发现了更多解决方法,但它们也引发了错误: scanf(“%I64d”,& rule); ->错误:ISO C不支持'I64 ..
发布时间:2020-09-28 04:14:57 其他开发