我想创建一个定制的打印函数,用法与print相同,但为id和tid多添加了2个参数.

#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/syscall.h>

int gettid() {
    return syscall(__NR_gettid);
}

void print( const char *fmt,...) {
    va_list vlist;
    va_start(vlist, fmt);

    va_end(vlist);
    return;
}

int main() { 
    printf("%d %d hello\n",getpid(), gettid());
    //print("hello\n");
    return 0; 

实现打印功能的正确方式是什么?

推荐答案

让您的函数首先打印PID和TID,然后使用vprintf来打印剩下的部分.

void print( const char *fmt,...) {
    va_list vlist;

    printf("%d %d ", getpid(), gettid());

    va_start(vlist, fmt);
    vprintf(fmt, vlist);
    va_end(vlist);
    return;
}

C++相关问答推荐

CC crate 示例不会与C函数链接

无效使用未定义类型'structsquare'?

字符串令牌化xpath表达式

使用单个字节内的位字段

将指针作为参数传递给函数

如何跨平台处理UTF-16字符串?

#If指令中未定义宏?

如何在C中引发/处理自定义信号?

双指针指向常量双指针的指针类型赋值不兼容

为什么cudaFree不需要数据 struct 的地址?

在C语言中,是否可以使枚举数向后计数?

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

如何使用FSeek和文件流指针在C中查找文件的前一个元素和前一个减go 一个元素

试图创建一个基本的Word克隆,但遇到了障碍

Fprintf正在写入多个 struct 成员,并且数据过剩

C程序向服务器发送TCPRST

表达式x&;&;(~x)应该返回1还是0?它依赖于编译器吗?

强制GCC始终加载常量(即只读),即使启用了优化

C中的空指针是什么(_N)?

Linux memcpy 限制关键字语法