C言語/基本的なプログラム
表示
Hello, World!を実行する
[編集]次のプログラムは Hello world と呼ばれ、多くのプログラミングの入門書などで使われる伝統的なプログラムです[1][2]。
画面に「hello, world(改行)」と表示した後、ただちに終了します。
- hello.c
#include <stdio.h> int main(void) { printf("hello, world\n"); return 0; }
- 実行結果
hello, world
- 解説
#include <stdio.h>
は、標準入出力ライブラリを使うための準備で、上の例の場合は printf() 関数の使用のために必要です。- この何も書いていない行は、読みやすくする目的で入れました。
- ここから、7行目までは 関数
main
の定義です。 1つのプログラムに必ず1つの関数main
を定義します。プログラムを実行するとき、まず関数main
から処理が始まります。
関数本体は、'{' で始まり、 '}' でおわります。 - ここから7行目までは関数
main
の内容が書かれています。ここではprintf関数の呼び出しの文とreturn文の2つの文が、関数main
の処理としてまとめられています。それぞれの文の終わりには、「; (セミコロン)」が必要です。セミコロンがあることにより、C言語のコンパイラが、その文の終わりであることを認識します。 - 標準ライブラリ関数の内の1つであるprintf関数の呼び出しです。
標準ライブラリとは、プログラミングでよく使われる処理がまとめられたもので、代表的なものには、入出力<stdio.h>、文字列操作<string.h>、数学<math.h>などがあります。
printf関数は、標準出力に対して書式付で文字列を書き出す関数です。標準出力のデフォルトはコンソールです。ここでは "hello, world\n" が標準出力に書き出される文字列です。\nはエスケープシーケンスの内の一つで改行を意味します。 - return文です。
return文とは、実行中の関数の実行を終了し、制御をその呼び出し元に返します。ここでは関数mainの終わりを意味しています。return 0;
」の0
は返値(戻値)と呼び、関数の呼び出し元に返す値で、ここでは、このプログラムを実行するオペレーティングシステムに対して返され、0はプログラムの成功を表しています(エラーがあった場合は、 0 以外の値を返します)。
「C言語/中級者向けの話題#プログラムの開始」、および「C言語/中級者向けの話題#プログラム終了処理」も参照
うまくコンパイルできない場合
コンパイルエラーが発生した場合、エラーメッセージをメモし、ヘルプ機能などを使って調べてみてください。
- エラーの原因は、エラーが報告された行、あるいはそれ以前の行にあります。
- エラーが複数報告された場合、最初のエラーから順に解消しましょう。
また以下の項目も確認してみてください。
- ソースコードを正しく入力したか。
- スペルミスはないか。
- 大文字と小文字を間違えていないか。
- スペースのつもりで「 」(いわゆる倍角スペース)を使っていないか?
- ';'(セミコロン)を書き忘れていないか、または ':'(コロン)と間違えていないか。
- 「{ } (中括弧)」を書き忘れていないか。
- 最後の行の改行を省いていないか。
- ファイルの保存形式は使用するコンパイラに適合しているか。
- エンコードが適合しているか?UTF-8、ASCIIまたはシフトJISかEU-JPかもしれない。
- ファイルの種類がテキスト形式以外、たとえばdocxなどになっていないか。
- ファイル名やディレクトリ名が長すぎないか。(環境によっては、255文字や8.3文字などと制約がついている場合がある)
- 環境変数を正しく設定したか。
- コンパイラのディレクトリがPATHに設定されているか。
- libやincludeのディレクトリがPATHに設定されているか。
ソースコードの整形
[編集]#include <stdio.h> int main(void){printf("hello, world\n");return 0;}
これはプログラムとしては正しく問題なく動作します。 しかし、人間にとって読みづらく修正も困難です。
- 整形例
#include <stdio.h> int main(void) { printf("hello, world\n"); return 0; }
この例は、clang-format で機械的に整形しました。
注釈、コメント
[編集]/* 文字列の表示 */
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}
「/* 変数の宣言と代入 */」のように、「/*」と「*/」によって、プログラム内容の説明を追記できる。このような追記を注釈(ちゅうしゃく)またはコメントという。注釈はコンパイルされた結果には影響を与えません。
注釈があると、他の人が読むときに、そのプログラムの内容が分かりやすくなので、必要に応じて注釈をつけましょう。
コメントには他にも、「//」というコメント方法もあります(C99以降)。
// 文字列の表示 #include <stdio.h> int main(void) { printf("hello, world\n"); return 0; }
のように、「//」以降から行末までがコメントになります。
脚註
[編集]- ^ Brian W. Kernighan. Programming in C -- A Tutorial. Bell Laboratories, Murray Hill, N. J .
- ^ B.W.カーニハン/D.M.リッチー『プログラミング言語C 第2版 ANSI規格準拠』p.7のhello, worldプログラムを一部改変
参考文献
[編集]- 国際標準化機構/国際電気標準会議 ISO/IEC 9899:2018(en) Information technology — Programming languages — C(2018-07-05)
外部リンク
[編集]- WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. (2011-04-12) . -- ISO/IEC 9899:2011(C11)リリース直前のドラフト
- ISO/IEC WG 14 Document Log. ISO/IEC. (2022-09-29) .
- C2x: N3054 working draft — September 3, 2022 ISO/IEC 9899:2023 (E). ISO/IEC. (2022-09-03) .
- ISO/IEC 9899:2018(en) Information technology — Programming languages — C. ISO/IEC. (2018-07-05) .
- N2176 C17 ballot ISO/IEC 9899:2017. ISO/IEC JTC1/SC22/WG14. オリジナルの2018-12-30時点によるアーカイブ。 .