不常用的 Linux/C 函数/系统接口整理

1. __builtin_popcount

	int __builtin_popcount(unsigned int n)
	int __builtin_popcountl(unsigned long n)
	int __builtin_popcountll(unsigned long long n)

输入数字n,二进制表示中‘1’的个数。

int main() {
    
    
    int num = 3;
    cout << "how many 1s in num: " << __builtin_popcount(num) << endl;

    return 0;
}
// how many 1s in num: 2

2. gcc __builtin_函数

1)gcc提供了很多__builtin_开头的内置函数,用于处理异常、可变长度参数列表、系统优化的目的,前2类不公开。
2)__builtin_函数分2类:
(1)没有C标准库对应方法的__builtin_函数,这类方法总是被inline展开,没有入口地址,只能用在函数中(不能用在表达式中,内联展开会导致编译错误)。
(2)有对应C标准库方法的__builtin_函数,内置函数和C库函数有完全相同的原型、入口地址。例如:__builtin_printf和printf。
如果通过编译参数(-fno-builtin)关闭内置函数,此时为了编译通过的方法:#define strcpy(d, s) __builtin_strcpy ((d), (s))

3. asprintf, vasprintf

	int asprintf(char **strp, const char *fmt, ...);
	int vasprintf(char **strp, const char *fmt, va_list ap);

功能类似sprintf、vsprintf,会为字符串分配足够的内存,并通过第一个参数strp返回新分配的内存。
strp指向的内容,需要用free()函数释放。

4. syscall函数

参见:Linux上用syscall()方法调用系统接口

猜你喜欢

转载自blog.csdn.net/yinminsumeng/article/details/131168172