我正在阅读一本使用 C的书(Butenhof 的POSIX 线程编程,1997 年),我遇到了以下行:
(void)free(data);
Run Code Online (Sandbox Code Playgroud)
这里,data只是一个指向已分配结构的指针,
data = malloc(sizeof(my_struct_t));
Run Code Online (Sandbox Code Playgroud)
为什么是free被强制转换的结果void?
根据我对 C 的理解,这似乎没有意义,原因有两个:
void这本书写于 1997 年。这是某种遗产吗?
作者提到这些示例是在 Digital Unix 4.0d 上运行的,但如果您不打算使用该结果,我仍然无法想象有理由强制转换该函数的结果。
" C编程语言 "一书在第8.7节" 实例 - 存储分配器 "中讨论了"限制性最强的类型" :
虽然机器各不相同,但每台机器都有一个限制性最强的类型:如果限制性最强的类型可以存储在特定地址,则所有其他类型也可以.在某些机器上,限制最多的类型是a
double; 在别人身上,int或是long足够的.
在他们的代码中,union header使用类型对齐long.
限制性最强的是什么意思?它可能是最大的类型(例如double),还是有另一种方法?
我一直在阅读K&R,并在实施malloc()包含时遇到了一些困惑.
typedef long Align; /* for alignment to long boundary */
union header { /* block header */
struct {
union header *ptr; /* next block if on free list */
unsigned size; /* size of this block */
} s;
Align x; /* force alignment of blocks */
};
typedef union header Header;
static Header base; /* empty list to get started */
static Header *freep = NULL; /* start of free list */
void *malloc(unsigned nbytes) …Run Code Online (Sandbox Code Playgroud) 我想在运行时输入一些命令行参数.喜欢
./program abc def ghi
Run Code Online (Sandbox Code Playgroud)
argc在这种情况下将是4.没问题.但如果我这样做
./program abc def *
Run Code Online (Sandbox Code Playgroud)
甚至
./program * abc def
Run Code Online (Sandbox Code Playgroud)
变量argc给我一个远大于4的值.
在打印整个argv数组(不考虑第0个参数; ./program)作为字符串时,我会得到一个列表,其中前两个元素是abc,def而其他元素都是工作目录中包含的文件的文件名.
我正在尝试从K&R学习C语言.我试图制作一个RPN计算器,我们可以给出类似的表达式./program 2 4 *.
这是什么原因?或者我错了?
c ×5
malloc ×2
architecture ×1
argc ×1
c++ ×1
casting ×1
free ×1
legacy-code ×1
long-integer ×1
loops ×1
shell ×1
void ×1