示例代码如下:
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
int printf(const char* format, ...)
{
char strTemp[256];
va_list argp;
va_start(argp, format);
int len = sprintf(strTemp, "[%s:%d] ", __FILE__, __LINE__);
vsnprintf(strTemp + len, sizeof(strTemp) - len, format, argp);
va_end(argp);
return write(STDOUT_FILENO, strTemp, strlen(strTemp));
}
int main(int argc, char const* argv[])
{
printf("Hello, %d + %d = %lf\n", 1, (int)'a', (double)(1 + 'a'));
}
运行结果:

image.png
但是如果试着打印一些以换行结尾的纯字符串:

image.png
这是因为像printf("Hello world\n")这种语句被gcc换成了puts("Hello world"),所以需要禁止gcc自动对此类语句做转换:

image.png