C语言学习08——函数

1.一个函数不写返回值时,默认返回int

复制代码
func(int var){
	var++;
	return var;
}
int main(){
	printf("func(1)=%d\n",func(1)); //func(1)=2
	return 0;
	
}

2.逗号表达式:整个逗号表达式的最终结果是最后一个子表达式(表达式 n)的值

**例:**func((1,2),(3,4,5))即为func(5)

3.例题:将字符串转换为整数

复制代码
int getNumber(char c){	// -1 {0~9}
	int ret=-1;
	if(('0'<=c)&&(c<='9')){
		ret=c-'0'; // 字符转数字:利用ASCII码差值,比如'5'-'0'=5
	}
	return ret;
}
int strtoint(char str[]){
	int ret=0;
	int sign=0; //符号位
	int i=0; //遍历字符串的索引
	if(getNumber(str[0])!=-1){ //情况1:开头是数字(比如"123")
		sign=1;
		i=0; //从0号元素的位置开始处理
	}
	else if(str[0]=='+'){
		sign=1;
		i=1; //从1号元素的位置开始处理
	}
	else if(str[0]=='-'){
		sign=-1;
		i=1;
	}
	while(sign&&str[i]){ //sign≠0(有合法符号)且str[i]≠'\0'(未到字符串末尾)
		int n=getNumber(str[i]);
		if(n!=-1){		// {0~9}
			ret=ret*10+n;		// 123456    1  1*10+2=12    12*10+3 = 123
		}
		else 			//如果n为-1  遇到非数字,比如:1234abc 12   => 1234
			break;
		i++;
	}
	ret=sign*ret;
	return ret;
}
int main(){
	
	char str[] = "-123";
	printf("strtoint(%s)=%d\n",str, strtoint(str));
	return 0;
}

4.C语言中的宏定义(复制粘贴替换)

无参宏

复制代码
#include <stdio.h>

// 无参宏:给数字100起别名MAX_NUM
#define MAX_NUM 100
// 无参宏:给字符串起别名HELLO
#define HELLO "Hello, Macro!" //真正意义上的常量

int main() {
    // 预处理后:int a = 100;
    int a = MAX_NUM;
    // 预处理后:printf("Hello, Macro!\n");
    printf(HELLO"\n");
    // 预处理后:if (a < 100)
    if (a < MAX_NUM) {
        printf("a小于最大值\n");
    } else {
        printf("a等于最大值\n"); // 最终输出这行
    }
    return 0;
}

带参宏

复制代码
#include <stdio.h>

// 带参宏:计算两个数的和
#define ADD(x, y) x + y
// 带参宏:
#define SQUARE(x) ((x) * (x))

int main() {
    // 预处理后:int sum = 10 + 20; → sum=30
    int sum = ADD(10, 20);
    printf("sum = %d\n", sum);
    
 
    // 预处理后:int good = ((10 + 20) * (10 + 20)); → good=900
    int good = SQUARE(10 + 20);
    printf("good = %d\n", good);
    return 0;
}

5.编译器组成

(1)预处理:处理所有宏以及#开头的语句(复制粘贴替换)

(2)编译模块:将C程序翻译成二进制程序

(3)将二进制程序组合成可执行程序

相关推荐
炸膛坦客1 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
世人万千丶2 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
遇乐的果园5 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园7 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_7 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
可乐奶茶sky7 小时前
AI Agent 学习
人工智能·学习
茯苓gao8 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
程序员Rock8 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
RD_daoyi10 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
chase。10 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人