标签: c-standard-library

为什么不是`printf`中定义的`float`的说明符?

它看起来像它可能是,有(至少在C99),可以适用于长度修改int:%hhd,%hd,%ld%lldsigned char,short,longlong long.甚至还有一个长度修饰符适用于double:%Lf均值long double.

问题是他们为什么省略float?按照模式,它可能是%hf.

c floating-point printf rationale c-standard-library

69
推荐指数
4
解决办法
3392
查看次数

"保留用于任何用途"的含义是什么?

注意:这是一个问题,但我添加了,以防一些C++专家可以提供C++使用与C不同的措辞的基本原理或历史原因.


在C标准库规范中,我们有这个规范性文本,C17 7.1.3保留标识符(强调我的):

  • 所有以下划线开头的标识符以及大写字母或另一个下划线始终保留用于任何用途.
  • 所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符.

现在我继续阅读各种受尊敬的C专家的答案,他们声称编译器或标准库可以使用下划线+大写或双下划线的标识符.

是否"保留用于任何用途"是指保留给除C语言本身的未来扩展之外的任何人?这意味着实现容许使用它们.

虽然上面的第二个短语,关于单个前导下划线似乎是针对实现?

通常,C标准的编写方式要求编译器供应商/库实现者是典型的读者 - 而不是应用程序员.

值得注意的是,C++的措辞非常不同:

  • 每个包含双下划线(__)或以下划线后跟大写字母(2.11)开头的名称都保留给实现以供任何使用.

(请参阅在C++标识符中使用下划线有哪些规则?)

这可能是C和C++之间的混淆,语言在这里有所不同吗?

c c++ language-lawyer c-standard-library

50
推荐指数
4
解决办法
4007
查看次数

第一个"c"在"calloc"中代表什么?

一名学生问了这个问题,我不确定.

猜测包括:"计数","清算","分块","完整",......

标准库文档没有说明它代表什么,并且没有类似命名的函数来指示模式.有没有人知道实际的词源,也许有一个权威的参考来支持它?

c malloc libc calloc c-standard-library

44
推荐指数
2
解决办法
7415
查看次数

C标准保证缓冲区是否未触及空终止符?

在为标准库的许多字符串函数提供缓冲区的各种情况下,是否保证缓冲区不会被修改超出null终止符?例如:

char buffer[17] = "abcdefghijklmnop";
sscanf("123", "%16s", buffer);
Run Code Online (Sandbox Code Playgroud)

是否buffer现在应等于"123\0efghijklmnop"

另一个例子:

char buffer[10];
fgets(buffer, 10, fp);
Run Code Online (Sandbox Code Playgroud)

如果读取行只有3个字符长,那么可以确定第6个字符与调用fgets之前相同吗?

c standards c-standard-library

43
推荐指数
3
解决办法
3421
查看次数

为什么没有int128_t?

许多编译器提供128位整数类型,但我使用的那些都没有提供typedef int128_t.为什么?

据我记得,标准

  • int128_t为此目的储备
  • 鼓励提供这种类型的实现来提供typedef
  • 要求此类实现提供intmax_t至少128位

(并且,我不相信我已经使用了实际符合最后一点的实现)

c c++ c++-standard-library c-standard-library

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

fgetpos/fsetpos和ftell/fseek有什么区别

What's the difference between using the functions fgetpos() and fsetpos() and using the functions ftell() and fseek() to get and set a position in a file?

What are fgetpos() and fsetpos() good for? Why would they be used instead of ftell() and fseek()?

c c-standard-library

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

为什么一些内置的Python函数只有传递?

我想看看math.py函数是如何实现的,但是当我在PyCharm中打开文件时,我发现所有函数都是空的,并且有一个简单的函数pass.例如:

def ceil(x): # real signature unknown; restored from __doc__
    """
    ceil(x)

    Return the ceiling of x as a float.
    This is the smallest integral value >= x.
    """
    pass
Run Code Online (Sandbox Code Playgroud)

我想这是因为使用的函数实际上来自C标准库.它是如何工作的?

python standard-library pycharm c-standard-library

28
推荐指数
1
解决办法
3589
查看次数

使用我的编译器和操作系统时,为什么当n = 5时pow(n,2)返回24?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int n,i,ele;
    n=5;
    ele=pow(n,2);
    printf("%d",ele);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是24.

我在Code :: Blocks中使用GNU/GCC.

怎么了?

我知道pow函数返回一个double,但是25适合一个int类型所以为什么这个代码打印24而不是25?如果n=4; n=6; n=3; n=2;代码有效,但有五个代码没有.

c math.h c-standard-library

23
推荐指数
1
解决办法
4809
查看次数

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

为什么abs()和fabs()在C中的两个不同的头文件中定义

标准库函数abs()声明中stdlib.h,而fabs()math.h.

为什么它们位于不同的标题中?

c header-files c-standard-library

14
推荐指数
2
解决办法
423
查看次数