【C语言】5.main(),递归,include以及Xcode的小知识

  • #include注意事项:

    • include 不必然非要写在率先行(因为它的职能就一定于拷贝代码)

      int main()

      {

      #include “yourFile.h”

      return 0;

      }

    • include的时候,可以分包路径

      #include “yourDocument/yourFile.h”

      int main()

      {

      return 0;

      }

    • include
      语句之后不须求加”;”(因为#include它是三个预处理指令,不是二个言辞)

  • Xcode运营原理:编译—>.o(目的文件)—>链接—>.out
    执行。先将团结的代码编译成二进制(.o文件),再与所依靠的函数(类似于stdio.h中的)链接,最终生成.out可执行文件。

  • Mac入手动编译

    cc -c main.c // 编译

    cc main.o // 链接

    ./a.out // 执行

  • #include的头文件不参预编译。

  • #include <yourFile.h>和#include “yourFile.h”:

    • 相互的区分在于:当被include的文本路径不是相对路径的时候,有两样的探寻顺序。

    • 对于使用双引号””来include文件,搜索的时候按以下依次:

      • 先在那条include指令的父文件所在文件夹内搜索,所谓的父文件,就是那条include指令所在的文件;
      • 如果上一步找不到,则在父文件的父文件所在文件夹内搜索;
      • 倘诺上一步找不到,则在编译器设置的include路径内寻找;
      • 假使上一步找不到,则在系统的include环境变量内搜索
    • 对于使用尖括号<>来include文件,搜索的时候按以下依次:

      • 在编译器设置的include路径内寻找;
      • 假使上一步找不到,则在系统的include环境变量内搜索
    • 假定您是团结安装clang编译器,clang设置include路径是(4.2是编译器版本):

      /usr/lib/clang/4.2/include

      Xcode自带编译器, clang设置include路径是:

      /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include

      Mac系统的include路径有:

      /usr/include

      /usr/local/include

      一旦没有那么些目录,可参考如下:

      开辟终端输入:xcode-select –install

      设置Command Line Tools之后就会现出

  • Xcode函数(方法)注释方法:

    • /** 函数(方法)的解释 */
    • @param 参数名 参数解释
    • @warning 提示注意的内容
    • @return 重临值 再次来到值解释
  • C语言中函数的概念只可以有一个,不可以重名(与别的语言差其他是,只要名字一样就是重名,即使参数和重回值差别,比如int
    sayHello();和void sayHello(int a)是同名的)。

  • 关于main函数:

    int main(int argc, const char * argv[])

    argc代表次第在进入main函数时的参数的个数。默认为1

    argv代表含有的相继参数。默认为程序的名字

    printf(“argc: %i, argv: %s”, argc, argv[0]);

    点击Xcode的甘休键左边的按钮,可以找到Edit
    Scheme
    ,点击进入,左面菜单里找到Run,之后在左侧找到Arguments,找到Arguments
    Passed On Launch
    ,里面添加运营参数。比如添加了一个”Hello”:

    printf(“argc: %i, argv: %s”, argc, argv[1]);

    现行则是:

    argc: 2, argv: Hello

  • 递归很开销内存,因为老是调用都会开发新的半空中。寻常来说八个函数写递归要分下边几步:

    • 找到截止条件,否则会极其递归下去。平日来说用if-else中的if来写。

    • 找到递归公式,即是以怎么着的规律来递归的。平时用if-else中的else来写。

    • 用递归法求N的阶乘:

      分析

      “`

      4!=432*1

      =4*3!

      =432!

      =432*1!

      n!=(n-1)!*n;

      (n-1)!=(n-2)!*(n-1);

      … …

      1!=1; 作为递归的了断条件

      “`

      实现

      int factorial(int n){
      int result = 0; //定义变量用于存放阶乘的结果
      if (n==1) { //如果n=1的时候,1!的结果还是1
          result = 1;
      }else{
          result = factorial(n-1)*n;//如果不是1,阶乘=(n-1)!*n;
      }
      return result;
      }
      
    • 规划二个函数用来计算B的n次方:

      分析

      result = 1;

      result = b

      result = result * b

      result = result * b

      myPow2(b, 0) = 1

      myPow2(b, 1) = b == myPow2(b, 0) * b

      myPow2(b, 2) = b * b == myPow2(b, 1) * b

      myPow2(b, 3) = b * b * b == myPow2(b, 2) * b

      实现

      int myPow2(int base, int n)
      {
        if (n <= 0) {
            return 1;
        }
        return myPow2(base, n - 1) * base;
      }