返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言容易被忽视的函数设计原则是什么
  • 488
分享到

C语言容易被忽视的函数设计原则是什么

2023-06-30 09:06:35 488人浏览 独家记忆
摘要

这篇文章主要介绍了C语言容易被忽视的函数设计原则是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言容易被忽视的函数设计原则是什么文章都会有所收获,下面我们一起来看看吧。函数设计原则函数从意义上应该是一个

这篇文章主要介绍了C语言容易被忽视的函数设计原则是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言容易被忽视的函数设计原则是什么文章都会有所收获,下面我们一起来看看吧。

函数设计原则

  • 函数从意义上应该是一个独立的功能模块

  • 函数名要在一定程度上反映函数的功能

  • 函数参数名要能够体现参数的意义

  • 尽量避免在函数中使用全局变量

  • 当函数参数不应该在函数体内部被修改时,应加上 const 声明

  • 如果参数是指针,且仅作输入参数,则应加上 const 声明,如下:

C语言容易被忽视的函数设计原则是什么

  • 不能省略返回值的类型

  • 如果函数没有返回值,那么应声明为 void

  • 类型对参数进行有效性检查

  • 对于指针参数的检查尤为重要

  • 不要返回指向“栈内存”的指针

  • 栈内存在函数体结束时被自动释放

  • 函数体的规模要小,尽量控制在 80 行代码之内

  • 相同的输入对应相同的输出,避免函数带有“记忆”功能

  • 避免函数有过多的参数,参数个数尽量控制在 4 个以内

  • 有时候函数不需要返回值,但为了增加灵活性,如支持链式表达,可以附加返回值

C语言容易被忽视的函数设计原则是什么

  • 函数名与返回值类型在语义上不可冲突

C语言容易被忽视的函数设计原则是什么

下面来欣赏一份优秀的代码:

#include "eclipseOS.h"#include "eclipseCommon.h"#include "eclipseUtil.h"#include <string.h>#include <stdlib.h>#include <stdio.h>#include <sys/stat.h>#ifdef _WIN32#include <direct.h>#else#include <unistd.h>#include <strings.h>#endif#define MAX_LINE_LENGTH 256int isJ9VM( _TCHAR* vm ){_TCHAR * ch = NULL, *ch3 = NULL;int res = 0;if (vm == NULL)return 0;ch = lastDirSeparator( vm );if (isVMLibrary(vm)) {if(ch == NULL)return 0;ch[0] = 0;ch3 = lastDirSeparator(vm);if(ch3 != NULL) {res = (_tcsicmp(ch3 + 1, _T_ECLIPSE("j9vm")) == 0);}ch[0] = dirSeparator;return res;} else {if (ch == NULL)    ch = vm;else    ch++;return (_tcsicmp( ch, _T_ECLIPSE("j9") ) == 0);}}int checkProvidedVMType( _TCHAR* vm ) {_TCHAR* ch = NULL;struct _stat stats;if (vm == NULL) return VM_NOTHING;if (_tstat(vm, &stats) == 0 && (stats.st_mode & S_IFDIR) != 0) {return VM_DIRECTORY;}ch = _tcsrchr( vm, _T_ECLIPSE('.') );if(ch == NULL)return VM_OTHER;#ifdef _WIN32if (_tcsicmp(ch, _T_ECLIPSE(".dll")) == 0)#elseif ((_tcsicmp(ch, _T_ECLIPSE(".so")) == 0) || (_tcsicmp(ch, _T_ECLIPSE(".jnilib")) == 0) || (_tcsicmp(ch, _T_ECLIPSE(".dylib")) == 0))#endif{return VM_LIBRARY;}if (_tcsicmp(ch, _T_ECLIPSE(".ee")) == 0)return VM_EE_PROPS;return VM_OTHER;}_TCHAR * checkPathList( _TCHAR* pathList, _TCHAR* programDir, int reverseOrder) {_TCHAR * c1, *c2;_TCHAR * checked, *result;size_t checkedLength = 0, resultLength = 0;size_t bufferLength = _tcslen(pathList);result = malloc(bufferLength * sizeof(_TCHAR));c1 = pathList;    while (c1 != NULL && *c1 != _T_ECLIPSE('\0'))    {    c2 = _tcschr(c1, pathSeparator);if (c2 != NULL)*c2 = 0;checked = checkPath(c1, programDir, reverseOrder);checkedLength = _tcslen(checked);if (resultLength + checkedLength + 1> bufferLength) {bufferLength += checkedLength + 1;result = realloc(result, bufferLength * sizeof(_TCHAR));}if(resultLength > 0) {result[resultLength++] = pathSeparator;result[resultLength] = _T_ECLIPSE('\0');}_tcscpy(result + resultLength, checked);resultLength += checkedLength;if(checked != c1)free(checked);if(c2 != NULL)*(c2++) = pathSeparator;c1 = c2;}    return result;}_TCHAR * concatStrings(_TCHAR**strs) {return concatPaths(strs, 0);}_TCHAR * concatPaths(_TCHAR** strs, _TCHAR separator) {_TCHAR separatorString[] = { separator, 0 };_TCHAR * result;int i = -1;size_t length = 0;while (strs[++i] != NULL) {length += _tcslen(strs[i]) + (separator != 0 ? 1 : 0);}result = malloc((length + 1) * sizeof(_TCHAR));result[0] = 0;i = -1;while (strs[++i] != NULL) {result = _tcscat(result, strs[i]);if (separator != 0)result = _tcscat(result, separatorString);}return result;}int containsPaths(_TCHAR * str, _TCHAR** paths) {_TCHAR * buffer;_TCHAR * c;int i;buffer = malloc((_tcslen(str) + 2) * sizeof(_TCHAR));_stprintf(buffer, _T_ECLIPSE("%s%c"), str, pathSeparator);for (i = 0; paths[i] != NULL; i++) {c = _tCSStr(buffer, paths[i]);if ( c == NULL || !(c == buffer || *(c - 1) == pathSeparator)){free(buffer);return 0;}}free(buffer);return 1;}int isVMLibrary( _TCHAR* vm ){_TCHAR *ch = NULL;if (vm == NULL) return 0;ch = _tcsrchr( vm, '.' );if(ch == NULL)return 0;#ifdef _WIN32return (_tcsicmp(ch, _T_ECLIPSE(".dll")) == 0);#elsereturn (_tcsicmp(ch, _T_ECLIPSE(".so")) == 0) || (_tcsicmp(ch, _T_ECLIPSE(".jnilib")) == 0) || (_tcsicmp(ch, _T_ECLIPSE(".dylib")) == 0);#endif}#ifdef AIX#include <sys/types.h>#include <time.h>char* getVMVersion( char *vmPath ){    char   cmd[MAX_LINE_LENGTH];    char   lineString[MAX_LINE_LENGTH];    char*  firstChar;    char   fileName[MAX_LINE_LENGTH];    time_t curTime;    FILE*  fp;    int    numChars = 0;    char*  version  = NULL;    (void) time(&curTime);    (void) sprintf(fileName, "/tmp/tmp%ld.txt", curTime);        (void) sprintf(cmd,"%s -version 2> %s", vmPath, fileName);    (void) system(cmd);     fp = fopen(fileName, "r");    if (fp != NULL)    {        if (fgets(lineString, MAX_LINE_LENGTH, fp) == NULL)    lineString[0] = '\0';    fclose(fp);    unlink(fileName);        firstChar = (char *) (strchr(lineString, '"') + 1);    if (firstChar != NULL)    numChars = (int)  (strrchr(lineString, '"') - firstChar);        if (numChars > 0)    {    version = malloc( numChars + 1 );    strncpy(version, firstChar, numChars);version[numChars] = '\0';}}      return version;}     int versionCmp(char *ver1, char *ver2){    char*  dot1;    char*  dot2;    int    num1;    int    num2;    dot1 = strchr(ver1, '.');    dot2 = strchr(ver2, '.');    num1 = atoi(ver1);    num2 = atoi(ver2);    if (num1 > num2)    return 1;if (num1 < num2)return -1;if (dot1 && !dot2)           return 1;    if (!dot1 && dot2)           return -1;    if (!dot1 && !dot2)          return 0;    return versionCmp((char*)(dot1 + 1), (char*)(dot2 + 1) );}#endif 

关于“C语言容易被忽视的函数设计原则是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C语言容易被忽视的函数设计原则是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C语言容易被忽视的函数设计原则是什么

本文链接: https://lsjlt.com/news/327896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言容易被忽视的函数设计原则是什么
    这篇文章主要介绍了C语言容易被忽视的函数设计原则是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言容易被忽视的函数设计原则是什么文章都会有所收获,下面我们一起来看看吧。函数设计原则函数从意义上应该是一个...
    99+
    2023-06-30
  • C语言容易被忽视的函数设计原则基础
    目录一、函数设计原则二、总结一、函数设计原则 函数从意义上应该是一个独立的功能模块函数名要在一定程度上反映函数的功能函数参数名要能够体现参数的意义尽量避免在函数中使用全局变量当函数参...
    99+
    2024-04-02
  • 网站建设过程中容易被忽略的元素是什么
    网站建设过程中容易被忽略的元素是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。网站的定位站长们都知道,在跟客户谈单时,客户会提出一些无厘头的要求,有的只是想...
    99+
    2023-06-10
  • C语言函数的调用原理是什么
    C语言函数的调用原理是通过栈来实现的。当一个函数被调用时,系统会为该函数分配一块内存空间,这块空间被称为栈帧。栈帧包含了函数的参数、...
    99+
    2023-09-04
    C语言
  • C++ 函数的语法规则是什么?
    c++++ 函数的语法格式为:returntype functionname(parameterlist) {}, 包括返回类型、函数名称和参数列表三个组成部分。具体函数调用示例为计算阶...
    99+
    2024-04-18
    c++ 函数语法
  • C++语言的设计目标是什么
    本篇内容介绍了“C++语言的设计目标是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C++以其独特的语言机制在计算机科学的各个领域中得到...
    99+
    2023-06-17
  • 数据库设计的基本原则是什么
    小编给大家分享一下数据库设计的基本原则是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!数据库设计的基本原则:1、把具有同一个主题的数据存储在一个数据表中;2、尽量消除冗余,提高访问数据...
    99+
    2024-04-02
  • c语言数据转换的规则是什么
    C语言中,数据转换的规则如下:1. 自动类型转换:当表达式中的操作数类型不同时,会发生自动类型转换。自动类型转换按照以下规则进行:-...
    99+
    2023-10-10
    c语言
  • MySQL数据库索引的设计原则是什么
    本篇内容主要讲解“MySQL数据库索引的设计原则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库索引的设计原则是什么”吧!为了使索引的使用效...
    99+
    2024-04-02
  • C语言函数的溯源是什么
    这篇文章主要介绍了C语言函数的溯源是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言函数的溯源是什么文章都会有所收获,下面我们一起来看看吧。一、函数的由来二、模块化程序设计三、C 语言中的模块化四、面向...
    99+
    2023-06-30
  • Go语言编程中分布式文件系统的设计原则是什么?
    随着互联网的快速发展,越来越多的企业和个人开始关注分布式系统的设计与实现。而分布式文件系统作为分布式系统中重要的组成部分,其设计原则也越来越受到人们的关注。 Go语言作为一门现代的高性能编程语言,越来越多的人开始使用Go语言来实现分布式文...
    99+
    2023-08-02
    编程算法 文件 分布式
  • python语言中定义函数的规则是什么
    在Python语言中,定义函数的规则如下:1. 使用关键字`def`来定义函数,后面跟着函数名和参数列表,参数列表用括号括起来。2....
    99+
    2023-08-30
    python
  • c语言中负数取余的规则是什么
    在C语言中,负数取余的规则是:- 如果被除数是正数,余数的符号与被除数一致。- 如果被除数是负数,余数的符号与被除数的符号相反。例如...
    99+
    2023-09-16
    c语言
  • c语言中fwrite函数指的是什么
    fwrite()是一个文件处理函数,它能够把ptr所指向的数组中的数据写入到给定流stream中,如成功执行则返回实际写入的数据块数目,该函数是以二进制形式对文件进行操作,不局限于文本文件。...
    99+
    2024-04-02
  • c语言fun函数的作用是什么
    c语言fun函数的作用有fun函数通常被主函数所调用。用fun来定义一个函数或方法,这样在引用时可以用fun表示。fun函数是自定义函数,只是在调用时用这个单词表示该函数。...
    99+
    2024-04-02
  • c语言wait函数的作用是什么
    C语言中的wait函数用于使父进程等待子进程的结束。当父进程调用wait函数时,如果子进程已经结束,则立即返回子进程的终止状态;如果...
    99+
    2023-09-06
    c语言
  • c语言feof函数的功能是什么
    feof函数的功能是检测文件流的结束标志。在C语言中,文件流通常通过FILE结构体表示,feof函数用于判断文件流是否已到达文件末尾...
    99+
    2023-10-10
    c语言
  • C语言fwrite函数的用法是什么
    fwrite函数是C语言中的一个文件操作函数,用于将数据块写入文件中。其基本用法如下:```csize_t fwrite(const...
    99+
    2023-09-12
    C语言
  • c语言realloc函数的用法是什么
    realloc函数是用于重新分配内存块的大小的函数。它可以用于扩大或缩小已经分配的内存块的大小。realloc函数的用法如下:voi...
    99+
    2023-09-14
    c语言
  • c语言free函数的作用是什么
    在C语言中,`free()`函数用于释放之前通过`malloc()`、`calloc()`或`realloc()`分配的动态内存。它...
    99+
    2023-09-15
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作