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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容