Demo1.m
一个基础的函数定义
#import<Foundation/Foundation.h> //定义一个返回值为int类型的,名为max的函数。传入的参数为两个int型数据 int max(int x,int y) { int z=x>y?x:y; return z;//返回结果 } int main(int argc,char * argv[]) { @autoreleasepool{ int a=6; int b=9; int result=max(a,b);//将a,b传入max函数,得到的返回值赋值给result NSLog(@"%d",result);//输出result的值 } }
Demo2.m
需要注意的地方
1.当函数指定的返回值类型和函数内return的值的类型不一样时,以函数指定的返回值类型为准
2.定义函数尽量定义在main函数前,虽然在Xcode中放在main函数后也可以,但是这并不符合C99标准,在其它运行环境中可能就会报错
(如果有强迫症或其它原因,一定要把函数放在在main函数后面,并且又想保持语言的规范性,那么请看Demo3.m)
3.如果函数没有返回值,一定要明确指定函数返回值类型为void
#import<Foundation/Foundation.h> int main(int argc,char * argv[]) { @autoreleasepool{ NSLog(@"通过调用函数,返回的值为:%f",demo_method(10,3));//输出demo_method的值 } } //定义一个返回值为int类型的,名为demo_method的函数。传入的参数为两个int型数据 int demo_method(int x,int y) { float z=x/y; NSLog(@"在函数内,还未返回时的值为:%f",(float)z);//输出demo_method的值//其中float是强制数据类型转换 return z;//返回结果 }
Demo3.m
函数声明
好吧,其实Demo3.m和Demo2.m没什么差别,只是在main函数前把自定义函数事先声明了一下,让编译器知道我拥有一个叫demo_method的函数。声明格式很简单,看Demo3.m第一行代码就知道了
当然也可以写成
int demo_method(int,int);
也就是说形参列表不指定形参名,而是直接指定形参类型就OK了
int demo_method(int x,int y); int main(int argc,char* argv[]) { @autoreleasepool { NSLog(@"The max is:%d.\n",max(8, 9)); NSLog(@"%@",sayHi(@"Kitty")); NSLog(@"通过调用函数,返回的值为:%d",demo_method(10,3));//输出demo_method的值 } return 0; } int demo_method(int x,int y) { float z=(float)x/y; NSLog(@"在函数内,还未返回时的值为:%f",z);//输出demo_method的值 return z;//返回结果 }