모든 C 프로그램에는 최소한 하나의 함수, 즉 주 함수인 main() 이 있습니다. 프로그램의 작업이 비교적 간단한 경우 모든 코드는 다음과 같이 작성됩니다. main() 함수이지만, 실제 개발에서는 프로그램의 작업이 더 복잡한 경우가 많습니다. 모든 코드를 main() 함수에 작성하면 main() 함수가 매우 크고 비대해지며 구조가 복잡해집니다. 그리고 반복되는 코드.
프로그램 논리와 작업 분할에 따라 코드를 다양한 사용자 정의 함수로 나눌 수 있습니다. main()은 비즈니스 논리 및 처리 흐름에 더 관심이 있습니다. 특정 작업을 수행해야 할 경우 다음을 호출하면 됩니다. 사용자 정의 기능이 바로 그것입니다.
이해를 돕기 위해 함수를 두 가지 유형으로 나눕니다. 하나는 라이브러리 함수이고 다른 하나는 사용자 정의 함수입니다.
라이브러리 기능은 C 언어에서 제공되거나 시스템에서 제공되며 scanf 및 printf와 같은 특정 기본 기능을 구현하며 프로그램에서 직접 사용할 수 있습니다.
사용자 정의 함수는 특정 작업을 완료하기 위해 프로그래머가 작성한 함수입니다. 목적은 특정 기능을 구현하거나 기본 프로그램을 더 간결하게 만드는 것입니다. 프로그래머는 사용자 정의 함수를 사용하기 전에 선언하고 정의해야 합니다.
사용자 정의 함수 선언은 컴파일러에게 함수 반환 값의 데이터 유형, 함수 이름 및 매개변수 목록을 포함하여 함수 이름과 함수 호출 방법을 알려줍니다.
일부 프로그래머들은 함수 선언을 함수 프로토타입이라고 부르기도 하는데, 표현은 다르지만 의미는 같습니다.
C 언어에서 함수를 선언하는 구문은 다음과 같습니다.
반환 값의 데이터 유형 return_type: 함수가 작업을 완료한 후 값을 반환할 수 있습니다. return_type은 int, char, double 또는 기타 사용자 정의된 데이터 유형일 수 있는 데이터 유형 함수에서 반환되는 값입니다. 일부 함수는 값을 반환하지 않고 작업만 수행합니다. 이 경우 return_type은 void 키워드로 표시됩니다.
반환값이 없는 함수의 선언 구문은 다음과 같습니다.
함수 이름 function_name: 함수 이름은 식별자이며 명명 규칙은 명명 규칙과 동일합니다. 변수 이름 규칙.
함수 매개변수 목록 매개변수 목록: 함수가 호출되면 호출자는 함수의 매개변수에 값을 전달해야 합니다. 매개변수 목록에는 매개변수의 유형과 순서가 포함됩니다. 매개변수 목록은 선택사항입니다. 즉, 함수에 매개변수가 있을 수 없습니다.
매개변수가 없는 함수의 선언 구문은 다음과 같습니다.
함수 선언의 예:
함수를 선언하고 반환값은 int형, 함수명은 check입니다. sc, function int height 매개변수는 하나만 있습니다. 함수 선언문 끝에 세미콜론이 빠질 수 없습니다.
사용자 정의 함수를 도구에 비유한다면 함수 선언은 도구의 설계 도면입니다.
맞춤 기능은 도구입니다. 이 도구를 사용하려면 설계 도면만으로는 충분하지 않습니다. 제공되는 도구의 실체입니다. 함수의 실제 본문은 함수의 기능을 구현하기 위해 프로그래머가 함수에 대한 코드를 작성하는 것입니다.
C 언어의 함수 정의 구문은 다음과 같습니다.
함수 정의의 return_type, function_name 및 매개변수 목록은 함수 선언과 일치해야 합니다.
함수 본문에는 작업을 완료하기 위해 실행해야 하는 명령문 모음이 중괄호 안에 포함되어 있습니다.
예:
참고: 함수 정의 뒤에 세미콜론을 추가하지 마세요. 다음은 초보자가 실수하기 쉽습니다.
커스텀 함수를 호출자 프로그램에서만 사용하는 경우 호출자 프로그램에서 선언 및 정의할 수 있으며, 선언은 일반적으로 상단에 있습니다. 호출자 프로그램 정의는 일반적으로 호출자 프로그램의 하위 부분에 있습니다. 이는 C 언어의 요구 사항은 아니지만 프로그램을 더 쉽게 읽을 수 있도록 프로그래머가 동의한 작성 방법입니다.
호출자 프로그램(book45.c)의 사용자 정의 함수 선언 및 정의 예:
book45.c에서 슈퍼우먼의 모습을 판별하는 checksc 함수는 그렇지 않습니다. 공개 함수는 초안 프로그램에서만 사용되므로 book45.c에서 선언되고 정의됩니다.
사용자 정의 함수가 두 숫자의 크기 비교와 같은 공용 함수 모듈인 경우 다른 헤더 파일(예: _public.h)에서 선언할 수 있으며 호출자 프로그램은 #include 전처리를 사용해야 합니다. 함수 선언이 포함된 지시문 헤더 파일입니다.
사용자 지정 함수가 공용 함수 모듈인 경우 다른 프로그램 파일(예: _public.c)에서 정의할 수 있습니다. 컴파일 시 호출자 프로그램과 사용자 지정 함수의 프로그램 파일을 함께 컴파일해야 합니다.
다음 예에서는 max 함수가 _public.h 헤더 파일에서 선언되고 _public.c 프로그램 파일에 정의되며 book46.c 프로그램에서 호출됩니다.
커스텀 함수의 헤더 파일(_public.h):
커스텀 함수의 프로그램 파일(_public.c):
프로그램 파일(book46 .c)
컴파일 명령은 다음과 같습니다:
참고:
1)book46.c의 6번째 줄
,
여기에 포함된 헤더 파일은 꺾쇠괄호 가 아닌 큰따옴표입니다. 일반적으로 #include는 C 언어에서 제공하는 라이브러리 함수의 헤더 파일을 포함하는 데 사용되며 #include ""는 프로그래머가 정의한 헤더 파일을 포함하는 데 사용됩니다.
2)호출자 프로그램을 컴파일할 때, 호출자 프로그램과 사용자 정의 함수의 프로그램 파일을 함께 컴파일하세요. 그렇지 않으면 컴파일 중에 다음 오류가 발생합니다.
올바른 컴파일 지침은 gcc -o book46 book46.c _public.c
3)이어야 합니다. 사용자 정의 함수의 헤더 파일 _public.h 및 _public.c의 이름은 다음과 같습니다. 프로그램의 가독성을 높이기 위해서는 가능한 한 의미 있는 이름을 사용해야 합니다.
C 언어는 이러한 함수를 호출하면 이러한 함수를 C 표준 함수(C 표준 라이브러리) 또는 줄여서 라이브러리 함수라고 부릅니다. printf, scanf, memset, strcpy 등 CC 언어에는 수백 가지의 라이브러리 함수가 있지만 일반적으로 사용되는 함수는 2~10분의 3 정도이므로 기억할 필요는 없습니다. 다음 장에서는 몇 가지 일반적인 라이브러리 함수의 사용법을 자세히 소개하겠습니다. 더 많이 사용하면 익숙해질 것입니다.
C 언어 표준 라이브러리 함수를 선언하는 헤더 파일은 /usr/include 디렉터리에 다음과 같이 저장됩니다.
<asset.h> <ctype.h> <errno.h> <float.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdarg.h> <stddef.h> <stdlib.h> <stdio.h> <string.h> <time.h>
C 언어 라이브러리 함수 정의 파일은 /usr/lib/gcc/x86_64 입니다. -redhat- linux/4.4.4/libgcc.a (컴파일러마다 버전 디렉터리 이름이 다름), 패키지된 정적 링크 라이브러리 파일입니다. 나중에 정적 링크 라이브러리에 대한 지식을 소개하겠습니다.
gcc로 프로그램을 컴파일할 때 libgcc.a를 포함하지 않았습니다. 이는 gcc 컴파일러가 기본적으로 이를 포함하기 때문입니다. 그러나 프로그래머가 정의한 함수의 헤더 파일과 프로그램 파일에는 이러한 처리가 필요하지 않습니다. 수동으로 포함됩니다.
어떤 헤더 파일을 포함해야 합니까? 포함? 두 가지 방법이 있는데, 하나는 Baidu에서 정보를 검색하는 것이고, 다른 하나는 Linux 시스템에서 제공하는 도움말을 사용하는 것입니다. strcpy 기능을 예로 들면 다음과 같이 명령줄에 man strcpy를 입력하고 Enter를 누르는 것입니다.
man이 표시됩니다. 함수 선언(5행)의 헤더 파일, 함수의 매개변수, 사용법 및 반환 값이 표시됩니다.
주의, 프로그램에 사용된 라이브러리 함수에 헤더 파일이 포함되어 있지 않으면 컴파일 중 반드시 경고가 될 수는 없지만 오류가 발생하거나 함수를 인식할 수 없는 등의 문제가 발생할 수도 있습니다. 컴파일러와 다른 C 언어의 컴파일은 다릅니다.
함수 호출 방법
C 언어에서 함수 호출은 매우 유연합니다. 명령문 라인을 차지하거나, 변수에 상수로 할당되거나, 함수의 매개변수로 사용될 수 있습니다.
함수의 반환 값이 void인 경우 함수의 작업이 주로 특정 기능을 완료하는 것임을 의미합니다. 일반적으로 한 줄로 작성되며 배타적인 문이 있습니다.
如果函数的返回值不是void,如果单行书写,表示不关心它的返回值,也可以当成常量用于任何表达式中。
例如:
当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行函数体的代码,当函数的返回语句被执行时,或到达函数的结束括号时,就把程序控制权交还给调用者程序。
示例(book47.c)
运行结果
关于函数的参数,在很多教程中有很多说法,如“形参”、“实参”、“值传递”、“地址传递”、“引用”等,这些说法把简单的概念复杂化了,大家不必理会。
函数的参数可以理解为函数的局部变量,参数传递就是调用者程序把变量(或常量)的值复制一份给函数的参数,简单说来就是复制的过程。一旦完成数据的复制,调用者程序的变量和函数的参数就再也没有瓜葛了,所以,在函数调用的过程中,函数的参数的值发生改变并不会影响调用者程序的变量的值。
我们在调用函数的时候,不关心函数参数的名称,函数参数的名称是函数自己的事情,只在函数内部使用,与调用者无关。
示例(book48.c)
运行结果
const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,如:
const int a = 10;
那么用 const 修饰后和未修饰前有什么区别呢?它们不都等于 10 吗?
用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。
在变量前加const约束,主要用于定义函数的参数,表示该参数在函数中是只读取,不允许改变,如果函数中试图改变它的值,编译的时候就会报错。
例如:
函数max在声明的时候,参数a和b都加了const约束,在函数中,a=10;和b=20;这两代码试图改变a和b的值。编译的时候如下:
编译无法通过。
在我的课程中,会介绍常用的库函数,但也有漏掉的。查资料是程序员的基本技能。
例如要查找C语言复制字符串功能的函数,在百度上输入“C语言复制字符串”搜索就可以了,你想查什么就输入什么。
然后,打开多几个网页看看,基本上就差不多了。
注意一个问题,网上的内容太多太杂乱,重点关注百度百科的文章。
1)测试函数的功能
要使用函数,只需要关注它需要包含的头文件、函数名、返回值、参数的数据类型和参数的顺序,不必关心参数的名称。
以strcpy函数为例,函数的声明如下。
char *strcpy(char *dest, const char *src);
函数名:strcpy
返回值:返回dest,一般没用,不理它。
第一个参数是目标字符串;第二个参数是源字符串,有const约束。
写代码测试一下:
char strname[50]; strcpy(strname,"西施"); printf("=%s=\n",strname);
然后,看看输出的结果是不是“=西施=”,用=号夹住输出的内容是为了看清楚有没有其它的字符。
感谢大家的阅读,希望大家收益多多。
本文转自:https://blog.csdn.net/wucz122140729/article/details/98369860
推荐教程:《C语言》
위 내용은 C 언어 사용자 정의 기능(자세한 그래픽 및 텍스트 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!