闲逸笔记

keep it simple & stupid

C 语言可变参数实现原理总结

1. 代码

#include <stdio.h>

typedef char * va_list;

#define _INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1)  &  ~(sizeof(int)-1))
#define va_start(ap, v) (ap = (va_list)&v + _INTSIZEOF(v))
#define va_arg(ap, t) ( *( t * ) ((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap)  (ap = (va_list)0)

void mprintf(char *, ...);

int main()
{
    int i;
    char *s;

    mprintf("test start...\n");

    i = 1;
    s = "hello world ...</stdio.h>
▼  展开全文... 评论(0)
《C.P.L》习题1-10, 如何捕获后退操作(点击backspace, 则输出"\b")

Windows 下非标准函数 <conio.h> 中的 getch() 函数可以实现此功能。但 Linux 下需要自己写一个类似的函数。

参考: http://cboard.cprogramming.com/faq-board/27714-faq-there-getch-conio-equivalent-linux-unix.html


backspace 在不同的键盘下,ASCII 码可能不一样。可能是 8 或者 127。

参考:http://www.52rd ...

▼  展开全文... 评论(0)
理解 C 语言的原码、反码、补码

1. 十六进制

16 进制数逢 16 进 1,2 进制逢 2 进 1。2 ^ 4 = 16。

16 进制进一位,恰好对应二进制进四位

十六进制 10  = 二进制 1 0000
十六进制 100 = 二进制 1 0000 0000

从而 ...

▼  展开全文... 评论(0)
top bottom