C言語入門

Similar documents
C言語入門

C言語入門

C言語入門

Microsoft Word - no02.doc

gengo1-2

kiso2-03.key

解きながら学ぶC++入門編

Microsoft Word - Cプログラミング演習(1)_2012

プログラミング実習I

C 言語第 2 回 C 言語の構成要素 ( シラバス 3 4 回目 ) 1 1 予約語 ( 教科書 59 ページの 識別子と予約語 参照 ) コンピュータに実行してもらう命令で C 言語に特有の名前が付いている プログラムの制御構造 : 演算子 : if~else for( ){ } g

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Report#2.docx

C言語入門

Microsoft Word - Training10_プリプロセッサ.docx

memo

PowerPoint Presentation

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Cプログラミング1(再) 第2回

プログラミング基礎

Microsoft PowerPoint - CproNt02.ppt [互換モード]

PowerPoint Presentation

02: 変数と標準入出力

講習No.1

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Report#2.docx

数値計算

02: 変数と標準入出力

導入基礎演習.ppt

kiso2-09.key

講習No.12

PowerPoint プレゼンテーション

Microsoft PowerPoint - 計算機言語 第7回.ppt

プログラミング実習I

Microsoft PowerPoint - kougi2.ppt

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

Microsoft Word - Cプログラミング演習(3)

8 / 0 1 i++ i 1 i-- i C !!! C 2

AquesTalk for WinCE プログラミングガイド

C C UNIX C ( ) 4 1 HTML 1

Microsoft PowerPoint - bp02.ppt

Microsoft PowerPoint pptx

ガイダンス

ポインタ変数

PowerPoint プレゼンテーション

slide5.pptx

02: 変数と標準入出力

Microsoft Word - no11.docx

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

ポインタ変数

プログラミングI 第2回 数理物理,総合理学等向け

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - kougi7.ppt

プログラミング 1 プログラミング演習 I プログラミングの重要性 プログラミング言語をなぜ勉強するのか? 世界的に有名な日本のある IT 企業の社長が求める人材に 必要なスキル 1. プログラミング (C 言語 ) 2. 数学 3. 英語 #-1 #-2 プログラミングはどこで使えるのか? 1.

memo

02: 変数と標準入出力

Microsoft Word - java a.doc

Microsoft PowerPoint - 09.pptx

Microsoft Word - no01.docx

02: 変数と標準入出力

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - 2.ppt [互換モード]

物質工学科 田中晋

Microsoft Word - 3new.doc

デジタル表現論・第6回

AquesTalk プログラミングガイド

memo

計算機プログラミング

スライド 1

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

第2回講義:まとめ

02: 変数と標準入出力

memo

情報処理演習 B8クラス

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

Microsoft PowerPoint - 11.pptx

第1回 プログラミング演習3 センサーアプリケーション

プログラミング及び演習 第1回 講義概容・実行制御

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

Doc-Like Word Template

ゲームエンジンの構成要素

Prog1_2nd

ファイル入出力


JavaプログラミングⅠ

C言語入門

プログラミング演習第一

gengo1-12

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

Microsoft Word - no01.docx

AquesTalk Win Manual

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

プログラミング演習3 - Cプログラミング -


PowerPoint プレゼンテーション

ファイル入出力

演算増幅器

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

講習No.9

Taro-ポインタ変数Ⅰ(公開版).j

Transcription:

1 C 言語入門 第 10 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む )

基本型 2

3 標準ヘッダ : <limits.h> 整数型の最小値 最大値は以下のマクロで定義されている unsigned signed 最小値最大値最小値最大値 char 0 UCHAR_MAX SCHAR_MIN SCHAR_MAX short 0 USHRT_MAX SHRT_MIN SHORT_MAX int 0 UINT_MAX INT_MIN INT_MAX long 0 ULONG_MAX LONG_MIN LONG_MAX char 型に関する定義 CHAR_BIT CHAR_MIN CHAR_MAX char 型のビット数 0 または SCHAR_MIN UCHAR_MAX または SCHAR_MAX

4 標準ヘッダ : <float.h> 浮動小数点型に関する定数は以下のマクロで定義されている float double 指数表現の基数 FLT_RADIX DBL_RADIX 精度の 10 進桁数 FLT_DIG DBL_DIG 仮数部における基数 (RADIX) の桁数 FLT_MANT_DIG DBL_MANT_DIG 1.0 + x 1.0 となる最小の x FLT_EPSILON DBL_EPSILON 最大値 FLT_MAX DBL_MAX 正規化された最小の浮動小数値 FLT_MIN DBL_MIN RADIX n 1 が表現可能な n の最大値 FLT_MAX_EXP DBL_MAX_EXP 10 n を正規化された浮動小数値として表現可能な n の最小値 FLT_MIN_EXP DBL_MIN_EXP

5 エラーメッセージを読みエラーの原因を推測しましょう 良くあるエラーの例

6 gcc のエラーメッセージ 環境変数 LANG を設定すると言語が変わる mintty + bash + GNU C $ LANG=C gcc error1.c error1.c: In function 'main': error1.c:7:3: error: expected ';' before 'printf' printf("world n"); ^ mintty + bash + GNU C $ LANG=ja_JP.UTF-8 gcc error1.c error1.c: 関数 main 内 : error1.c:7:3: エラー : expected ; before printf printf("world n"); ^ ロケール (locale) と呼ばれる多言語化の仕組み JM: locale (7)

7 mintty の locale の設定 mintty 左上のアイコンから option Text ここに Locale: ja_jp Cahaacter set: UTF-8 を設定して OK しておく

8 文末の ; 忘れ 4 5 6 7 8 9 10 文末に ; を忘れると次の文字でエラーに error1.c int main() { printf("hello, ") printf("world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error1.c error1.c: 関数 main 内 : error1.c:7:3: エラー : expected ; before printf printf("world n"); ^ エラーが生じたのは 7 行目の 3 文字目だが エラーの原因は 6 行目の行末 C 言語では スペースや改行は人間に読み易くするための位置調整に過ぎないので printf("hello, ") printf("world n"); は printf("hello, ")printf("world n"); と同じ意味 ここに ; があるべきだが ; の前に p が現れたことがエラーの原因

9 ブロック開始終端の不整合 4 5 6 7 8 9 10 { が 1 つ多い error2_1.c int main() { { printf("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error2_1.c error2_1.c: 関数 main 内 : error2_1.c:10:1: エラー : expected declaration or statement at end of input ^ が 1 つ足らない状態で ファイルの終端 ( 入力の終端 ) に達している

10 ブロック開始終端の不整合 4 5 6 7 8 9 が 1 つ多い error2_2.c int main() { printf("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error2_2.c error2_2.c:8:3: エラー : expected identifier or ( before return return EXIT_SUCCESS; ^ error2_2.c:9:1: エラー : expected identifier or ( before token ^ エラーが生じたのは 8 行目の 3 文字目だが エラーの原因は 7 行目 が 1 つ多いので main 関数の定義が 7 行目で終わっている つまり 8~9 行目は 何もないところにいきなり以下のように書いたのと同じ 8 9 return EXIT_SUCCESS;

11 ブロック開始終端の不整合 4 5 6 7 8 9 関数名のミススペル error3.c int main() { print("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error3.c /tmp/ccopikhp.o:error3.c:(.text+0x15): `print' に対する定義されていない参照です /tmp/ccopikhp.o:error3.c:(.text+0x15): 再配置がオーバーフローしないように切り詰められました : R_X86_64_PC32 ( 未定義シンボル `print' に対して ) /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccopikhp.o: 誤った再配置アドレス 0x0 がセクション `.pdata' 内にあります /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: 最終リンクに失敗しました : 無効な操作です collect2: エラー : ld はステータス 1 で終了しました コンパイルではなくリンクに失敗したと言われている 分割コンパイルによる 外部関数のリンクの際 print が見つからなかった printf のつもりが print とミススペルしている 標準ライブラリに print 関数は用意されていない コンパイルフェーズではなくリンクフェーズでのエラー ~.o ファイルについて参照がみつからないと言われている

12 不要な ; 4 5 6 7 8 9 関数定義がプロトタイプ宣言になっている error4.c int main(); { printf("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error4.c error4.c:5:1: エラー : expected identifier or ( before { token { ^ main() の直後に ; があるのでそこで文が終わっている このため 関数の定義ではなく 関数のプロトタイプ宣言になっている

13 ファイルが見つからない 1 2 3 4 5 6 7 8 9 ファイル名や配置場所を確認する error5.c #include <stdio.h> #include <stdilb.h> int main(); { printf("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error5.c error5.c:2:20: 致命的エラー : stdilb.h: No such file or directory #include <stdilb.h> ^ コンパイルを停止しました #include しようとしたファイルが見つからない #include に与えたファイル名か ファイルに付けた名前のどちらかが間違っている 上記の例では stdlib.h が正しいが lib ではなく ilb になっている コンパイルフェーズではなく プリプロセスフェーズでのエラー

14 C 言語のコンパイル コンパイラにより実行形式に変換する Source files.h ファイル.h ファイル.h ファイル C compiler Preprocessor C コンパイラは実際には preprocessor compiler linker の 3 段階に分かれている Object files C compiler.c ファイル.c ファイル.c ファイル.o ファイル.o ファイル.o ファイル linker Executable files 実行ファイル ライブラリライブラリライブラリ

15 エラー時の対処方法 エラーメッセージをよく読みましょう 行番号と何文字目かも参考になります 同じようなエラーメッセージなら 同じような原因である可能性が高いはずです 原因が分からない場合は エラーメッセージを Google 等の検索エンジンで検索しましょう

16 参考文献 [1] B.W. カーニハン /D.M. リッチー著石田晴久訳 プログラミング言語 C 第 2 版 ANSI 規格準拠 共立出版 (1989)