它看起来像它可能是,有(至少在C99),可以适用于长度修改int:%hhd,%hd,%ld和%lld指signed char,short,long和long long.甚至还有一个长度修饰符适用于double:%Lf均值long double.
问题是他们为什么省略float?按照模式,它可能是%hf.
注意:这是一个c问题,但我添加了c ++,以防一些C++专家可以提供C++使用与C不同的措辞的基本原理或历史原因.
在C标准库规范中,我们有这个规范性文本,C17 7.1.3保留标识符(强调我的):
- 所有以下划线开头的标识符以及大写字母或另一个下划线始终保留用于任何用途.
- 所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符.
现在我继续阅读各种受尊敬的C专家的答案,他们声称编译器或标准库可以使用下划线+大写或双下划线的标识符.
是否"保留用于任何用途"是指保留给除C语言本身的未来扩展之外的任何人?这意味着实现不容许使用它们.
虽然上面的第二个短语,关于单个前导下划线似乎是针对实现?
通常,C标准的编写方式要求编译器供应商/库实现者是典型的读者 - 而不是应用程序员.
值得注意的是,C++的措辞非常不同:
- 每个包含双下划线(
__)或以下划线后跟大写字母(2.11)开头的名称都保留给实现以供任何使用.
(请参阅在C++标识符中使用下划线有哪些规则?)
这可能是C和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之前相同吗?
许多编译器提供128位整数类型,但我使用的那些都没有提供typedef int128_t.为什么?
据我记得,标准
int128_t为此目的储备intmax_t至少128位(并且,我不相信我已经使用了实际符合最后一点的实现)
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()?
我想看看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标准库.它是如何工作的?
#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;代码有效,但有五个代码没有.
这些getch和getchar功能之间的确切区别是什么?
标准库函数abs()声明中stdlib.h,而fabs()在math.h.
为什么它们位于不同的标题中?