前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言函数大全--h开头的函数

C语言函数大全--h开头的函数

原创
作者头像
huazie
发布于 2025-04-02 12:37:39
发布于 2025-04-02 12:37:39
13300
代码可运行
举报
文章被收录于专栏:开发语言-C/C++开发语言-C/C++
运行总次数:0
代码可运行

总览

函数声明

函数功能

double hypot(double x, double y);

计算直角三角形的斜边长(double)

float hypotf (float x, float y);

计算直角三角形的斜边长(float)

long double hypot(long double x, long double y);

计算直角三角形的斜边长(long double)

#define HUGE_VAL _HUGE

正浮点常量表达式(double),这些表达式与浮点函数和运算符在溢出时返回的值相比较

#define HUGE_VALF __INFF

正浮点常量表达式(float),这些表达式与浮点函数和运算符在溢出时返回的值相比较

#define HUGE_VALL __INFL

正浮点常量表达式(long double),这些表达式与浮点函数和运算符在溢出时返回的值相比较

void harderr(int (*fptr)());

建立一个硬件错误处理程序

void hardresume(int rescode);

硬件错误处理函数

void hardretn(int rescode);

硬件错误处理函数

void highvideo(void);

选择高亮度文本字符

int hcreate(size_t nel);

根据条目数创建哈希表。

int hcreate_r(size_t nel, struct hsearch_data *htab);

根据条目数及其描述创建哈希表。

ENTRY *hsearch(ENTRY item, ACTION action);

添加或搜索哈希条目。

int hsearch_r (ENTRY item, ACTION action, ENTRY ** retval, struct hsearch_data * htab )

搜索哈希表。

void hdestroy(void);

销毁哈希表,释放用于创建哈希表的内存。

void hdestroy_r(struct hsearch_data *htab);

销毁哈希表,释放指定哈希表所占用的内存。

1. hypot,hypotf,hypotl

1.1 函数说明

函数声明

函数功能

double hypot(double x, double y);

计算直角三角形的斜边长(double)

float hypotf (float x, float y);

计算直角三角形的斜边长(float)

long double hypot(long double x, long double y);

计算直角三角形的斜边长(long double)

1.2 演示示例

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <math.h>

int main(void)
{
   double result, x = 3.0, y = 4.0;
   result = hypot(x, y);

   float resultf, xf = 3.0, yf = 4.0;
   resultf = hypotf(xf, yf);

   long double resultL, xL = 3.0, yL = 4.0;
   resultL = hypotl(xL, yL);

   printf("The hypotenuse of a right triangle whose legs are %lf and %lf is %lf\n", x, y, result);
   printf("The hypotenuse of a right triangle whose legs are %f and %f is %f\n", xf, yf, resultf);
   printf("The hypotenuse of a right triangle whose legs are %Lf and %Lf is %Lf\n", xL, yL, resultL);

   return 0;
}

1.3 运行结果

2. HUGE_VAL,HUGE_VALF,HUGE_VALL

2.1 函数说明

宏定义

宏描述

#define HUGE_VAL _HUGE

正浮点常量表达式(double),这些表达式与浮点函数和运算符在溢出时返回的值相比较

#define HUGE_VALF __INFF

正浮点常量表达式(float),这些表达式与浮点函数和运算符在溢出时返回的值相比较

#define HUGE_VALL __INFL

正浮点常量表达式(long double),这些表达式与浮点函数和运算符在溢出时返回的值相比较

2.2 演示示例

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include<stdio.h>
#include<math.h>
int main()
{
    double result = 1.0/0.0;
    printf("1.0/0.0 = %lf\n", result);
    if (result == HUGE_VAL)
        puts("1.0/0.0 == HUGE_VAL\n");

    float resultf = 1.0f/0.0f;
    printf("1.0f/0.0f = %f\n", resultf);
    if (resultf == HUGE_VALF)
        puts("1.0f/0.0f == HUGE_VALF\n");

    long double resultL = 1.0L/0.0L;
    printf("1.0L/0.0L = %Lf\n", resultL);
    if (resultL == HUGE_VALL)
        puts("1.0L/0.0L == HUGE_VALL\n");

    return 0;  
}

2.3 运行结果

3. harderr,hardresume,hardretn

3.1 函数说明

函数声明

函数功能

void harderr(int (*fptr)());

建立一个硬件错误处理程序

void hardresume(int rescode);

硬件错误处理函数

void hardretn(int rescode);

硬件错误处理函数

3.2 演示示例

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define IGNORE  0
#define RETRY   1
#define ABORT   2
int buf[500];

//定义捕获磁盘问题的错误消息
static char *err_msg[] = {
    "write protect",
    "unknown unit",
    "drive not ready",
    "unknown command",
    "data error (CRC)",
    "bad request",
    "seek error",
    "unknown media type",
    "sector not found",
    "printer out of paper",
    "write fault",
    "read fault",
    "general failure",
    "reserved",
    "reserved",
    "invalid disk change"
};

int error_win(char *msg)
{
    int retval;
    cputs(msg);

    // 提示用户按键中止、重试、忽略
    while(1)
    {
        retval= getch();
        if (retval == 'a' || retval == 'A')
        {
            retval = ABORT;
            break;
        }
        if (retval == 'r' || retval == 'R')
        {
            retval = RETRY;
            break;
        }
        if (retval == 'i' || retval == 'I')
        {
            retval = IGNORE;
            break;
        }
    }

    return(retval);
}

/*
    pragma warn-par 减少了由于处理程序未使用参数errval、bp 和 si而产生的警告。
*/
#pragma warn -par

int handler(int errval,int ax,int bp,int si)
{
    static char msg[80];
    unsigned di;
    int drive;
    int errorno;
    di= _DI;

    // 如果这不是磁盘错误,那么是另一个设备出现故障
    if (ax < 0)
    {
        error_win("Device error");
        // 返回到直接请求中止的程序
        hardretn(ABORT);
    }
    // 否则就是磁盘错误
    drive = ax & 0x00FF;
    errorno = di & 0x00FF;
    sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ", err_msg[errorno], 'A' + drive);
    // 通过dos中断0x23返回程序,并由用户输入中止、重试或忽略。
    hardresume(error_win(msg));
    return ABORT;
}

#pragma warn +par

int main(void)
{
    // 在硬件问题中断上安装我们的处理程序
    harderr(handler);
    clrscr();
    printf("Make sure there is no disk in drive A:\n");
    printf("Press any key ....\n");
    getch();
    printf("Trying to access drive A:\n");
    printf("fopen returned %p\n", fopen("A:temp.dat", "w"));
    return 0;
}

上述程序是一个基于DOS环境的磁盘错误处理示例。在磁盘操作出现错误时,向用户显示具体的错误消息,并提供 “中止”“重试”“忽略” 三种处理选项,根据用户的选择进行相应的处理。

4. highvideo

4.1 函数说明

函数声明

函数功能

void highvideo(void);

选择高亮度文本字符

4.2 演示示例

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <conio.h>

int main(void)
{
    clrscr();

    lowvideo();
    cprintf("Low Intensity text\r\n");
    highvideo();
    gotoxy(1,2);
    cprintf("High Intensity Text\r\n");

    return 0;
}

上述利用 <conio.h> 头文件中的函数实现特定的控制台文本显示效果。

  • 首先通过 clrscr() 函数清空控制台窗口。
  • 然后调用 lowvideo() 将文本显示设置为低亮度,使用 cprintf() 输出低亮度的 "Low Intensity text" 文本并换行。
  • 接着调用 highvideo() 把文本显示切换为高亮度,利用 gotoxy(1, 2) 将光标定位到第 1 列第 2 行,再用 cprintf() 输出高亮度的 "High Intensity Text" 文本并换行,以此直观展示控制台中低亮度和高亮度两种不同的文本显示效果。

不过需要留意,conio.h 并非标准 C 库的一部分,它主要在像 Turbo C 这类旧的编译器中使用,而在现代开发环境里可能不被支持。

5. hcreate,hcreate_r

5.1 函数说明

函数声明

函数功能

int hcreate(size_t nel);

根据条目数创建哈希表。

int hcreate_r(size_t nel, struct hsearch_data *htab);

根据条目数及其描述创建哈希表。

入参:net : 哈希表中允许的最大项数。 htab : 哈希表的结构体数据。

返回值:如果操作成功,则返回一个非零值; 如果操作失败,则返回 0 并将 errno 设置为一个值。

5.2 演示示例

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>
#include <search.h>

char *data[] = { "alpha", "bravo", "charlie", "delta",
     "echo", "foxtrot", "golf", "hotel", "india", "juliet",
     "kilo", "lima", "mike", "november", "oscar", "papa",
     "quebec", "romeo", "sierra", "tango", "uniform",
     "victor", "whisky", "x-ray", "yankee", "zulu"
};

int main(void)
{
    ENTRY e, *ep;
    int i;

    hcreate(30);

    for (i = 0; i < 24; i++) {
        e.key = data[i];
        // 数据只是一个整数,而不是指向某个东西的指针
        e.data = (void *) i;
        ep = hsearch(e, ENTER);
        // 这里不应该有失败场景
        if (ep == NULL) {
            fprintf(stderr, "entry failed\n");
            exit(EXIT_FAILURE);
        }
    }

    for (i = 22; i < 26; i++) {
        // 从表中打印两个条目,并显示其中两个不在表中
        e.key = data[i];
        ep = hsearch(e, FIND);
        printf("%9.9s -> %9.9s:%d\n", e.key, ep ? ep->key : "NULL", ep ? (int)(ep->data) : 0);
    }
    hdestroy();
    exit(EXIT_SUCCESS);
}

6. hsearch,hsearch_r

6.1 函数说明

函数声明

函数功能

ENTRY *hsearch(ENTRY item, ACTION action);

添加或搜索哈希条目。

int hsearch_r (ENTRY item, ACTION action, ENTRY ** retval, struct hsearch_data * htab )

搜索哈希表。

注意: hsearchhsearch_r 函数根据指定的操作在哈希表中搜索条目。如果操作为 FIND,则仅执行搜索操作。如果操作为 ENTER,则未找到的条目将添加到哈希表中。hsearch_r 函数与 hsearch 函数的不同之处在于,指向找到的项的指针以 *retval 形式返回,而不是作为函数结果。

入参:item: 要搜索的哈希表条目。 action: 功能操作。ENTER 表示已添加条目,FIND 表示已搜索条目。 retval: 指向找到的项的指针。 htab : 哈希表的结构体数据。

hsearch 函数返回值:如果操作成功,则返回指向哈希表的指针。

hsearch_r 函数返回值:如果操作成功,则返回一个非零值; 如果操作失败,则返回 0。

6.2 演示示例

参考 5.2

7. hdestroy,hdestroy_r

7.1 函数说明

函数声明

函数功能

void hdestroy(void);

销毁哈希表,释放用于创建哈希表的内存。

void hdestroy_r(struct hsearch_data *htab);

销毁哈希表,释放指定哈希表所占用的内存。

7.2 演示示例

参考 5.2

8. htonl, htons

8.1 函数说明

函数声明

函数功能

uint32_t htonl(uint32_t hostlong);

将 uint32_t(32位整数,如IPv4地址)从主机字节序转为网络字节序。

uint16_t htons(uint16_t hostshort);

将 uint16_t(16位整数,如端口号)从主机字节序转为网络字节序(大端)。

8.2 演示示例

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdint.h>     // 提供 uint16_t, uint32_t 类型
#include <arpa/inet.h>  // Linux/macOS 头文件(网络字节序转换)

int main() {
    // 示例1:转换16位端口号(host to network short)
    uint16_t host_port = 0x1234;  // 主机字节序的端口(假设是小端模式)
    uint16_t net_port = htons(host_port);
    printf("主机端口: 0x%04x -> 网络端口: 0x%04x\n", host_port, net_port);

    // 示例2:转换32位IP地址(host to network long)
    uint32_t host_ip = 0x12345678;  // 主机字节序的IP地址
    uint32_t net_ip = htonl(host_ip);
    printf("主机IP: 0x%08x -> 网络IP: 0x%08x\n", host_ip, net_ip);

    return 0;
}

参考

  1. [API Reference Document]
  2. [highvideo]
  3. [hcreate,hsearch,hdestroy,hcreate_r,hsearch_r,hdestroy_r]
  4. [UTILS-标准C库]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言函数大全--o 开头的函数
返回值: 一个 size_t 类型的值,表示该成员变量在结构体中的偏移量(单位是字节)。
huazie
2025/05/14
1970
C语言函数大全--o 开头的函数
C语言函数大全--p 开头的函数
在上述的示例中,主线程调用了 pthread_create() 函数来创建一个新的线程,并传递一个函数指针 thread_func 作为新线程的入口点。新线程运行这个函数,并输出一条消息。主线程等待新线程结束,然后继续运行自己的代码。
huazie
2025/05/15
2080
C语言函数大全--p 开头的函数
C语言之——入门必刷题(2)
在一些入门题目中,题目经常会让我们输入n个数,之后以升序或者降序的方式输出,或者比较。
The sky
2023/04/12
5330
C语言之——入门必刷题(2)
C语言函数大全--n 开头的函数
huazie
2025/05/12
1610
C语言函数大全--n 开头的函数
C语言函数大全--i开头的函数
从指定 I/O 端口读取到的 16 位数据。若读取过程中出现错误,返回值的具体情况可能因系统和硬件而异。
huazie
2025/04/20
1330
C语言函数大全--i开头的函数
C语言函数大全--a开头的函数
开始之前,引用一篇《基于Redis海量数据场景分布式ID架构实践》,该文通过比对不同实现方案的优缺点,帮助大家在分布式ID生成方面提供一些有益的参考和启示。有需要的朋友可以深入研究下!
huazie
2024/12/01
2440
C语言函数大全--a开头的函数
C语言函数大全--m 开头的函数(下)
上述的示例代码,演示了如何使用 mmap() 函数将一个文件映射到内存中,并使用指针 ptr 访问这个映射区域 :
huazie
2025/05/10
1720
C语言函数大全--m 开头的函数(下)
C语言函数大全--e开头的函数
以 (x, y) 为中心,xradius、yradius 为 x 轴 和 y 轴 半径,从角 stangle 开始,endangle 结束,画一段椭圆线。当stangle=0,endangle=360 时,画出一个完整的椭圆
huazie
2025/01/09
1940
C语言函数大全--e开头的函数
C语言函数大全--c开头的函数
huazie
2024/12/28
3140
C语言函数大全--c开头的函数
C语言函数大全--f开头的函数(上)
注意: 如果文件中的一行,不足 n-1 个字符,则读完该行就直接结束。如若该行(包括最后一个换行符)的字符数超过 n-1,则 fgets 只返回一个不完整的行,但是,缓冲区总是以 NULL 字符结尾,对 fgets 的下一次调用会继续读该行。函数成功将返回 stream,失败或读到文件结尾返回 NULL。因此不能直接通过 fgets 的返回值来判断函数是否是出错而终止的,应该借助 feof 函数或者 ferror 函数来判断。
huazie
2025/01/17
2350
C语言函数大全--f开头的函数(上)
C语言函数大全--l开头的函数
上述示例程序中,首先通过 open() 函数打开一个名为 test.txt 的文件,并设置文件访问模式为可读写。接着,调用 lock() 函数对该文件进行加锁操作,保护写入数据的过程。然后,通过 write() 函数将数据写入到文件中。最后,调用 lock() 函数对该文件进行解锁操作,释放锁定的资源。
huazie
2025/04/29
1230
C语言函数大全--l开头的函数
C语言函数大全--j开头的函数
J_0(x) = \sum_{m=0}^{\infty} \frac{(-1)^m}{(m!)^2} \left( \frac{x}{2} \right)^{2m}
huazie
2025/04/23
1450
C语言函数大全--j开头的函数
【C语言】题集 of ④
🚀write in front🚀 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5,2021博客之星Top100→周榜31→总榜2629🏅 🆔本文由 謓泽 原创 CSDN首发🐒 如需转载还请通知⚠ 📝个人主页:打打酱油desu_泽En_CSDN博客🎓 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📢系列专栏:【C】系列_打打酱油desu-CSDN博客📣 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
謓泽
2022/12/12
7370
VS2022中cmath.h头文件功能介绍
在C语言的世界里,数学运算一直是程序开发中不可或缺的一部分。无论是进行简单的数值计算,还是处理复杂的科学工程问题,都需要借助数学函数来实现。在Visual Studio 2022(VS2022)中,cmath.h(在C语言中通常为math.h)头文件为我们提供了丰富的数学函数和常量,极大地简化了数学运算的实现过程。今天,我们就来深入探讨一下cmath.h头文件的功能、使用注意事项以及一些拓展应用,帮助大家更好地掌握这一强大的工具。
siy2333
2025/02/12
1610
C语言函数大全--d开头的函数
注意: 这个程序可能无法在现代操作系统上直接运行,因为其中的一些函数(如disable()、enable()、getvect() 和 setvect())是特定于 DOS 的。如果你想在现代操作系统(如 Linux 或 Windows)上运行这个程序,你可能需要使用更现代的方法来处理中断或使用 DOS 模拟器。
huazie
2025/01/05
2070
C语言函数大全--d开头的函数
C语言函数大全--f开头的函数(下)
如果文件顺利打开后,指向该流的文件指针就会被返回;否则文件打开失败则返回 NULL,并把错误代码存在 error 中。
huazie
2025/01/18
1770
C语言函数大全--f开头的函数(下)
C语言函数大全--c开头的函数之复数篇
相位角是描述波形在时间轴上的位置的一个重要参数,它决定了波形的起始位置和变化状态。在实际应用中,相位角的测量和控制对于电路设计和信号处理至关重要。通过对相位角的理解和应用,可以更好地分析和控制波动现象,从而实现对电力系统和通信系统的优化。
huazie
2024/12/29
1850
C语言函数大全--c开头的函数之复数篇
C语言函数大全--m 开头的函数(上)
注意: 如果 s 是空指针,则返回 0,表示不是多字节字符;否则,如果 n 不足以包含完整的多字节字符,则返回 -1,表示需要更多的输入;否则,返回多字节字符所需的字节数。
huazie
2025/05/08
2070
C语言函数大全--m 开头的函数(上)
C语言函数大全--g开头的函数(上)
上述代码是一个简单的图形程序,使用了图形库函数 arc 来绘制一个弧线并显示其起始和结束点的坐标。
huazie
2025/01/22
1800
C语言函数大全--g开头的函数(上)
基础篇- iOS开发中常用的数学函数
在编程中我们总要进行一些数学运算以及数字处理,本文简单总结下常用的数学函数 。 常用函数 1、 三角函数 double sin (double);正弦 double cos (double);余弦 double tan (double);正切 2 、反三角函数 double asin (double); 结果介于[-PI/2, PI/2] double acos (double); 结果介于[0, PI] double atan (double); 反正切(主值),
進无尽
2018/09/12
1.4K0
相关推荐
C语言函数大全--o 开头的函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验