すべての C プログラムには、少なくとも 1 つの関数、つまり main 関数 main があります。 (), プログラムのタスクが比較的単純な場合、すべてのコードは main() 関数に記述されますが、実際の開発では、プログラムのタスクはより複雑になることがよくあります。 () 関数、main() 関数 これは非常に大きく肥大化し、複雑な構造と繰り返しコードが含まれます。
プログラムのロジックとタスクの分割に従って、コードをさまざまなカスタム関数に分割できます。main() は、特定のタスクの場合、ビジネス ロジックと処理フローにさらに関係します。を実行する必要がある場合は、これらのカスタム関数を呼び出すだけです。
理解を容易にするために、関数を 2 つのタイプに分けます。1 つはライブラリ関数、もう 1 つはカスタム関数です。
ライブラリ関数は、C 言語またはシステムによって提供され、scanf や printf などの特定の基本関数を実装し、プログラム内で直接使用できます。
カスタム関数は、特定の機能を実現したり、メイン プログラムをより簡潔にしたりすることを目的として、特定のタスクを完了するためにプログラマによって作成される関数です。プログラマはカスタム関数を使用する前に宣言して定義する必要があります。
カスタム関数の宣言は、関数の名前と関数の呼び出し方法をコンパイラーに指示することです。関数の戻り値の型、関数名、パラメータのリストのデータを含みます。
プログラマによっては、関数宣言を関数プロトタイプと呼ぶこともありますが、表現は異なりますが、意味は同じです。
C 言語で関数を宣言する構文は次のとおりです。
Return値のデータ型 return_type: 関数はタスクを完了した後、値を返すことができます。return_type は、関数によって返される値のデータ型であり、int、char、double などのいずれかになります。カスタマイズされたデータ型。一部の関数は値を返さずにタスクのみを実行します。この場合、return_type はキーワード void で表されます。
戻り値のない関数の宣言構文は次のとおりです。
関数名 function_name: 関数名は識別子であり、命名規則は変数名と同じです。
関数パラメータ リストのパラメータ リスト: 関数が呼び出されるとき、呼び出し元は関数のパラメータに値を渡す必要があります。関数。パラメータ リストには、パラメータの種類と順序が含まれます。パラメータ リストはオプションです。つまり、関数にパラメータを含めることはできません。
パラメータのない関数の宣言構文は次のとおりです。
例関数宣言:
関数を宣言します。戻り値は int 型、関数名は checksc、関数のパラメータは 1 つだけですint の高さ。関数の宣言ステートメントの最後のセミコロンを省略できないことに注意してください。
カスタム関数をツールに例えると、関数宣言はツールの設計図に相当します。
カスタム関数はツールです。このツールを使用するには、設計図があるだけでは十分ではありません。ツールでは、関数の定義がこのツールの実体であり、関数の実際の本体を提供します。関数の機能を実現するために、プログラマは必要な関数のコードを記述します。
C 言語での関数定義の構文は次のとおりです。
return_type、function_name、および関数定義 パラメータ リストは関数宣言と一致している必要があります。
関数本体には、タスクを完了するために実行する必要があるステートメントのコレクションが中括弧で囲まれて含まれています。
例:
関数の後にポイントを追加しないでください。定義番号、以下は間違いであり、初心者はこの間違いを犯しがちです。
カスタム関数が呼び出し元プログラム内にのみ存在する場合呼び出し元プログラムで使用され、呼び出し元プログラムで宣言および定義できます。通常、宣言は呼び出し元プログラムの上部にあり、定義は通常、呼び出し元プログラムの下部にあります。これは要件ではありません。 C 言語ですが、プログラムを読みやすくするためのもので、プログラマーが合意した書き方です。
呼び出し元プログラム (book45.c) でのカスタム関数の宣言と定義の例:
##book45.c では、スーパーガールの体型を決定する関数 checksc は公開関数ではなく、ドラフトプログラムでのみ使用されるため、宣言および定義されています。 book45.c にあります。
カスタム関数がパブリック関数モジュールである場合 (2 つの数値の大きさの比較など)、他のヘッダー ファイル (_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 言語の標準ライブラリ関数の宣言されたヘッダー ファイルは、次のように /usr/include ディレクトリに格納されます。言語ライブラリ関数 定義ファイルは /usr/lib/gcc/x86_64-redhat-linux/4.4.4/libgcc.a (コンパイラのバージョンによってディレクトリ名が異なります) これはパッケージ化された静的リンク ライブラリ ファイルです。リンク ライブラリの知識については後で説明します。
gcc でプログラムをコンパイルしたときに libgcc.a をインクルードしませんでした。これは、gcc コンパイラーがデフォルトでこれをインクルードするためです。ただし、プログラマ定義関数のヘッダー ファイルプログラム ファイルにはこの処理がないため、手動で含める必要があります。
どのようなヘッダー ファイルをインクルードする必要がありますか?
ライブラリ関数を使用するとき、そのヘッダー ファイルがインクルードされていない場合、警告が表示されます。
どのヘッダー ファイルをインクルードする必要がありますか?方法は 2 つあります。1 つは Baidu で情報を検索する方法、もう 1 つは Linux システムが提供するヘルプを使用する方法です。strcpy 関数を例に挙げると、次のようにコマンド ラインで man strcpy と入力して Enter キーを押します。
man は、関数の宣言ヘッダー ファイル (5 行目)、関数パラメーター、使用法、および戻り値を表示します。
プログラムで使用されているライブラリ関数にヘッダー ファイルが含まれていない場合、コンパイル中の警告であるとは限らず、エラーである可能性もあるため、関数を実行できないことに注意してください。これはコンパイラに依存し、C 言語ごとにコンパイラが異なります。関数の呼び出し方法
ライブラリ関数はシステムによって宣言および定義され、既製のツールです。カスタム関数はプログラマ自身が宣言・定義するものであり、プログラマが補助するツールであり、既製ツールであっても補助ツールであっても、ユーザーにとってはすべてツールであり、違いはありません。
関数の戻り値が void の場合、その関数のタスクは主に特定の関数を完了することであることを意味します。通常は 1 行で記述され、排他的なコードが含まれます。声明。
如果函数的返回值不是void,如果单行书写,表示不关心它的返回值,也可以当成常量用于任何表达式中。 例如: 当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行函数体的代码,当函数的返回语句被执行时,或到达函数的结束括号时,就把程序控制权交还给调用者程序。 示例(book47.c) 运行结果 关于函数的参数,在很多教程中有很多说法,如“形参”、“实参”、“值传递”、“地址传递”、“引用”等,这些说法把简单的概念复杂化了,大家不必理会。 函数的参数可以理解为函数的局部变量,参数传递就是调用者程序把变量(或常量)的值复制一份给函数的参数,简单说来就是复制的过程。一旦完成数据的复制,调用者程序的变量和函数的参数就再也没有瓜葛了,所以,在函数调用的过程中,函数的参数的值发生改变并不会影响调用者程序的变量的值。 我们在调用函数的时候,不关心函数参数的名称,函数参数的名称是函数自己的事情,只在函数内部使用,与调用者无关。 示例(book48.c) 运行结果 const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,如: 那么用 const 修饰后和未修饰前有什么区别呢?它们不都等于 10 吗? 用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。 在变量前加const约束,主要用于定义函数的参数,表示该参数在函数中是只读取,不允许改变,如果函数中试图改变它的值,编译的时候就会报错。 例如: 函数max在声明的时候,参数a和b都加了const约束,在函数中,a=10;和b=20;这两代码试图改变a和b的值。编译的时候如下: 编译无法通过。 在我的课程中,会介绍常用的库函数,但也有漏掉的。查资料是程序员的基本技能。 例如要查找C语言复制字符串功能的函数,在百度上输入“C语言复制字符串”搜索就可以了,你想查什么就输入什么。 然后,打开多几个网页看看,基本上就差不多了。 注意一个问题,网上的内容太多太杂乱,重点关注百度百科的文章。 1)测试函数的功能 要使用函数,只需要关注它需要包含的头文件、函数名、返回值、参数的数据类型和参数的顺序,不必关心参数的名称。 以strcpy函数为例,函数的声明如下。 函数名:strcpy 返回值:返回dest,一般没用,不理它。 第一个参数是目标字符串;第二个参数是源字符串,有const约束。 写代码测试一下: 然后,看看输出的结果是不是“=西施=”,用=号夹住输出的内容是为了看清楚有没有其它的字符。 感谢大家的阅读,希望大家收益多多。 本文转自:https://blog.csdn.net/wucz122140729/article/details/98369860 推荐教程:《C语言》 函数调用的过程
函数参数的传递
const约束
const int a = 10;
应用经验
char *strcpy(char *dest, const char *src);
char strname[50];
strcpy(strname,"西施");
printf("=%s=\n",strname);
以上がC言語カスタム関数(詳細なグラフィックとテキストの説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。