函数(function)表示每个输入值对应唯一输出值的一种对应关系。
所以一个完整的函数由函数名、函数体、输入输出参数以及返回值等几部分组成。
下面就是一个类似于strcpy函数的实现案例,
char* strcpy(char* dest, const char* src)
{
char * temp = dest;
while(*temp != '\0')
{
*temp = *src;
temp++;
}
return dest;
}
如果是调用库函数或者别的模块提供的接口函数,那么在调用之前就必须先弄清楚:
1. 函数可以实现的功能;
2. 函数的返回值代表的含义;
3. 函数的参数是输入参数还是输出参数,参数应该如何传。
这就必须要阅读接口相应的文档资料;
如果以上几点都没有完全搞清楚就去调用接口函数,那出错也就不足为奇了。
如果是提供接口函数给其他模块使用,则必须要:
1. 函数名称应该很直观的表现函数的功能;
2. 函数功能应该要越简单越好,一个函数只做一件事;
3. 必须提供对函数名、函数功能、函数输入输出参数以及返回值的说明。
同步函数,就是当函数执行正常返回时,函数所要做的事情都已经做完了。
异步函数,函数会立即返回,但是函数所要做的事情还没有完成。
单线程环境下,程序总是会被顺序的执行(去掉中断的情况),总是一个函数调用另一个函数。
必须要等到被调用函数执行完,程序才能继续往下执行。
所以单线程环境不存在异步函数或异步调用的概念。
为什么要使用异步函数?
这是因为如果函数执行需要较长的时间,此时再调用同步函数,线程就会被卡住直接函数执行完成。
异步函数调用如何保证同步呢?
最简单的方法就是通过callback机制,在调用异步函数时传入一个函数指针;
异步函数的内部保存该函数指针,在函数真正执行完成时通过该函数指针通知调用方。
同步调用直观简单易于理解;
异步调用需要更加注意多线程间的消息同步以及程序设计方法。
总之要根据具体软件设计的需要来决定。