首页 > 其他分享 >奋斗百天我要xueC--03

奋斗百天我要xueC--03

时间:2023-02-14 01:44:16浏览次数:36  
标签:03 调用 头文件 函数 文件 -- xueC include main

0x00 来啦来啦

0x01 函数

函数不能嵌套,故定义的函数要放在main函数之上(先定义后调用)
int sum(int m,int n){xxxx return xx}
函数声明,用在函数定义前,就被调用的情况,保证程序不报错。
image
后面再补函数体就行了。

对于多个文件的程序,通常是将函数定义放到源文件(.c文件)中,将函数的声明放到头文件(.h文件)中,使用函数时引入对应的头文件就可以,编译器会在链接阶段找到函数体。

全局变量默认的作用域是整个程序,包括其他文件,
加入static 就只能作用在本文件。

C支持单独代码块
image

0x1.1递归函数

一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。

0x1.2 自带头文件(C标准库)

image

0x1.2.1 c库用法

https://cplusplus.com/reference/clibrary/

0x1.3 补

尾递归
中间递归
多层递归
递归优化,减少时间

0x20 预处理命令

带有#的命令,在程序执行前执行。
编译器会将预处理的结果保存到和源文件同名的.i文件中,例如 main.c 的预处理结果在 main.i 中

举个栗子,执行程序前,休眠5秒,要求跨平台,windows 和linux 函数不同,要先判断

#include <stdio.h>
//不同的平台下引入不同的头文件
#if _WIN32  //识别windows平台
#include <windows.h>
#elif __linux__  //识别linux平台
#include <unistd.h>
#endif
int main() {
    //不同的平台下调用不同的函数
    #if _WIN32  //识别windows平台
    Sleep(5000);
    #elif __linux__  //识别linux平台
    sleep(5);
    #endif
    puts("http://c.biancheng.net/");
    return 0;
}

0x21

include "stdio.h" || include <stdio.h>
双引号包含头文件,编译器会先从当前目录找,找不到在从系统路径找。
尖括号直接从系统路径找

0x22 宏定义

#define N 100 末尾不需要加分号
终止作用域

#define PI 3.14159
int main(){
    // Code
    return 0;
}
#undef PI
void func(){
    // Code
}

带参数的宏定义

#define M(y) y*y+3*y  //宏定义
// TODO:
k=M(5);  //宏调用
# 在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型

0x23 宏与函数

宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存。而函数是一段可以重复使用的代码,会被编译,会给它分配内存,每次调用函数,就是执行这块内存中的代码。

0x24 #ifdef 宏名 #ifndef 宏名

补充

编译与链接

编译(Compile)会将源文件(.c文件)转换为目标文件。对于 VC/VS,目标文件后缀为.obj;对于GCC,目标文件后缀为.o。
链接(Link)是针对多个文件的,它会将编译生成的多个目标文件以及系统中的库、组件等合并成一个可执行程序。

标签:03,调用,头文件,函数,文件,--,xueC,include,main
From: https://www.cnblogs.com/cmview/p/17092938.html

相关文章

  • 被Harmony耍得团团转
    被Harmony耍得团团转同步:https://x.zhufn.fun/被harmony耍得团团转Tags:reverse,risc-v(附件在这里https://github.com/R0IS/RCTF2021/blob/main/Recv/Harmony/Harmony......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • 创建cronjob用户和命名空间
    创建命名空间#注意命名规则kubectlcreatenamespacecyj-scheduleyaml创建用户createaccount.yamlapiVersion:v1kind:ServiceAccountmetadata:name:s......
  • ubuntu下装显卡驱动装了好久。。。
    用的是菜单中的additionaldrivers安装的推荐驱动。但是nvidia-smi命令一直出不来,nodeivicewerefound;最后是用的第二个不带open的解决的~~~https://forums.develop......
  • 计算机导论学习记录(三)
    这个作业的目标<学习内容的系列记录>这个作业属于哪个课程计算机导论这个作业要求在哪里https://www.bilibili.com/video/BV1EW411u7th/?spm_id_from=333.33......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • R语言原生管道绘图
    前言最近写论文的时候又一次用到了R。这次我是对Java有一定程度了解后再次转向R,才真正认识到R这门语言在统计编程和数据可视化领域的优雅和快速。首先可以看一段Java的st......
  • Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 c
    FSouvenirs将询问离线,对原数组离散化,然后用权值线段树维护区间对应权值最大值,\(a_i\)的权值为\(i\),再用树状数组维护区间两数绝对值差的最小值。复杂度为\(\mathcal{......
  • 12-Verilog-同步FIFO设计
    同步FIFO和异步FIFOFIFO分为一个同步FIFO,一个异步FIFO,FIFO有读口和写口读写时钟是一个,就是同步FIFO;读写时钟不是一个,异步FIFOIP核设计中,一般使用同步FIFO设计SO......
  • 聊聊火热的 ChatGPT(我帮大伙问了几个比较关心的问题)
    如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/L9tZy_KWnE1kf0E3HNhJhQ本文大概2562个字,阅读需花15分钟内容不多,但也花了一些精力如......