美文网首页我是程序员;您好程先生;叫我序员就好了
【C语言】5.main(),递归,include以及Xcode的

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

作者: ForeverYoung21 | 来源:发表于2015-08-25 23:37 被阅读354次
    • 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;
        }
        

    • #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之后就会出现

    • #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 // 执行

    相关文章

      网友评论

        本文标题:【C语言】5.main(),递归,include以及Xcode的

        本文链接:https://www.haomeiwen.com/subject/gomccttx.html