トーク:C言語
話題追加FORTRANの登場が1957年、C言語の登場は1972年ですから「コンパイルによってマシン語コードを得るタイプの言語の草分け」と言うのはかなり無理があるんじゃないでしょうか。 220.214.133.213 2004年11月12日 (金) 16:22 (UTC)
C言語/***のページについて
[編集]C言語/***のページは、2009年6月頃からフルスクラッチにより作成されました。 その際、C言語のページから作成した内容を順次削除していきました。 削除する前の内容は[1]を参照してください。 Toya shiwasu (トーク) 2014年3月22日 (土) 07:26 (UTC)
- より分かりやすく全体を書き直そうと思います。Toya shiwasu (トーク) 2016年3月19日 (土) 06:12 (UTC)
- 修正終わりました。ポインタについてはもう少し勉強してから加筆しようと思います。Toya shiwasu (トーク) 2016年6月19日 (日) 18:31 (UTC)
実行環境は?
[編集]「書いてコンパイルしてみたでしょうか?」などと書かれているが、その方法を解説するべきでは? 実行環境を整えるということについて解説するとしたら、wikibooksとしてはどのようにするべきか? やはりフリーのgccなどだろうか? 219.109.48.17 2005年1月4日 (火) 05:34 (UTC)
- 開発環境については代表的なものを紹介するだけにとどめるべきだと思います。各開発環境のインストール方法や使用方法は本来その開発環境の開発元が説明するべき内容であり、それを第三者が行うことは情報の信頼性が低くなり、またたとえ信頼性が低い情報であっても説明されたサイトが存在すると、利用者から開発元に説明を求める要求がおきにくくなるという問題も考えられます。--Toya shiwasu 2009年5月23日 (土) 09:39 (UTC)
- 開発環境についてはC言語/はじめに#開発環境を整えるで記述しています。Toya shiwasu (トーク) 2013年12月13日 (金) 12:32 (UTC)
準拠する規格
[編集]一言でC言語と言っても、K&R-Cから最新のANSI/ISO-Cまで言語仕様は様々です. どの辺りを基準にしているのか、についての記述も欲しく思います. Akio, also known as "a perfect fool" 2005年1月20日 (木) 20:22 (UTC)
- 準拠する規格は日本語で書かれた最も新しい規格「JISX3010 プログラム言語C」でいいと思います。特に昔の規格に準拠する必要もないでしょうし、英語の規格ですと訳語の統一が難しくなりますし。Toya shiwasu 2009年5月13日 (水) 21:24 (UTC)
- 『JISX3010:2003 プログラム言語C』は日本工業標準調査会のホームページ「http://www.jisc.go.jp/ 」→「JIS検索」→「JIS規格番号からJISを検索」で「X3010」と入力し「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます。--Toya shiwasu 2009年5月23日 (土) 10:09 (UTC)
- また、読者にとって必要な情報は、JIS規格に書かかれてある内容だけであるとは思われません。C言語については、既に多くの方々が、ご自身のホームページでご紹介されています。
- JISX3010に準拠すると意気込んでましたが、私自身があまり理解できていないため厳しいです。現状関係がありそうな部分を脚注に挙げているだけとなっています。そこでJISX31010ではなく、一般の書籍を参考に書いていき、参考文献にそれらの書籍を挙げる形に変更しようと思います。Toya shiwasu (トーク) 2016年3月19日 (土) 06:12 (UTC)
- http://rubykaigi.org/2011/ja/schedule/details/17S06 RubyのJISの読み方が、JISを読むうえで参考になるかもです。Toya shiwasu (トーク) 2016年5月7日 (土) 11:57 (UTC)
目次案
[編集]上で意見が上げられているのはまさしくその通りでありまして…あと、現在の概要があまりに膨大になりすぎているのでこれらを整えたいと考えます。
目次案に対するコメント
- 目次全体を修正。C言語の構成要素をデータとアルゴリズムにおおざっぱに分けてみました。Toya shiwasu 2009年5月13日 (水) 20:14 (UTC)
- 「基礎知識」の項目を追加--Toya shiwasu 2009年5月28日 (木) 14:49 (UTC)
- 「制御文」の項目を追加--Toya shiwasu 2009年6月9日 (火) 09:44 (UTC)
- 現在の目次に従って、目次全体を修正。各ページの説明も修正。Toya shiwasu (トーク) 2013年12月13日 (金) 12:32 (UTC)
- 目次案を修正しました。Toya shiwasu (トーク) 2016年3月19日 (土) 06:12 (UTC)
- 記法のページの削除をやめました。Toya shiwasu (トーク) 2016年3月29日 (火) 13:27 (UTC)
目次案
- C言語...C言語のトップページ。C言語とは(歴史・特徴・用途など)。各ページへのリンク。
- C言語/記法...文字集合、字句、文、ブロックを扱う。
- C言語/データ型と変数...データ型と変数の基本に加え、全ての記憶域クラス指定子、型指定子、型修飾子を扱う又はリンクする。
- C言語/演算子と式...演算子と式の基本に加え、全ての演算子を扱う又はリンクする。
- C言語/制御文...論理型、全ての制御文を扱う。
- C言語/配列...1次元又は多次元の配列を扱う。
- C言語/ポインタ...ポインタを扱う。
- C言語/配列とポインタ...配列とポインタの関係を扱う。
- C言語/文字と文字列...マルチバイト文字セット、Unicode文字セットを扱う。
- C言語/構造体・共用体...構造体、ビットフィールド、共用体を扱う。
- C言語/関数...関数を扱う。
- C言語/前処理指令...全ての前処理指令を扱う。
- C言語/標準ライブラリ...全ての標準ライブラリを扱う。ファイル入出力については特別にページを作って扱う。
- C言語/おわりに...C言語を一通り勉強した読者に対して、次にどんなことを勉強したらよいか、など。
ページ分け案
[編集]関数の詳しい話や型の話は別ページ(関数や変数)に移動しても良いかと思います。 これを書いている時点の本文の趣旨は「入門用の一番最初の説明」だと思うので、あまりに詳しい話は避けるべきでは無いでしょうか?
もしくは、上の目次案のみをC言語のトップにして、「入門用の一番最初の説明」を別ページに設けるのも手かと思います。
こんなのをひとまず作ってみましたがどうでしょうか
- C言語メニュー
- Fadis 2005年8月31日
・上の目次案にしたがってページを作成してみます。Toya shiwasu 2009年5月14日 (木) 18:07 (UTC)
・ページ「C言語」の本文に既にいくらか記述がありますが、冗長な表現が多く、また正確ではない記述も多く、修正しながら完成させることが非常に困難なため、新しいページをフルスクラッチで作成しています。作成したページに情報が全て含まれた項目から順次、ページ「C言語」から削除していく予定です。
- 上の目次案は現在の目次と同じです。Toya shiwasu (トーク) 2013年12月13日 (金) 12:32 (UTC)
上のページ分け案でC言語/基礎知識のページの内容が多くなりすぎているようなので分割しようか検討中です。Toya shiwasu(トーク) 2012年8月27日 (月) 13:24 (UTC)
- 現在、C言語/基礎知識は必要最低限の記述にとどめて、詳細についてはリンクにしてあります。Toya shiwasu (トーク) 2013年12月13日 (金) 12:32 (UTC)
- (すじにくシチュー の報告)冒頭の提案「関数の詳しい話や型の話は別ページ(関数や変数)に移動しても良いかと思います」について。既に「C言語/中級者向けの話題」に移動しました。--すじにくシチュー (トーク) 2018年7月7日 (土) 07:52 (UTC)
標準関数について
[編集]多くの場合C言語について書かれた本は、stdio.hを「とりあえずおまじないとして」書くように教えた後、printfなどを使って実際に動く様子を見せ、その後ライブラリという物について教える、というスタイルをとっています。が、できればライブラリというものを理解してからincludeを登場させた方が話がスムーズに運ぶと思います。サンプルを用意するのが非常に困難になるかもしれませんが、ライブラリについての説明より前の段階では極力includeを避けるべきだと思います。
- Fadis 2005年8月31日
私も「おまじない」として説明を後回しにする方法は避けたいと考えています。しかし、入力と出力のためにscanf関数とprintf関数の使用は必須であると思われます。はじめに「C言語/基礎知識」というページをつくり、scanf関数、printf関数、変数、四則演算子、代入演算子などについて、(短く・分かりやすくのトレードオフが難しいとは思うが)最低限の説明をした方が、その後の説明がスムーズになると思います。--Toya shiwasu 2009年5月24日 (日) 07:54 (UTC)
- ライブラリについてはC言語/はじめに#開発手順で少し説明してあります。printf関数、scanf関数についてはC言語/基礎知識で簡単に説明してあります。Toya shiwasu (トーク)
While文の動作について
[編集]while文の項目で
while (式) { 文1 文2 }
と
while (式) 文1 while (式) 文2
が等価なコードであると説明されていますが、これは等価ではないと思います。 前者の場合は、文1と文2はまとまりとして繰りかえされますが、後者の場合は2つのwhile文は互いに独立なので、文1を繰り返してから文2を繰り返すことになると思います。 ですので、修正の必要があると思いますが、どうでしょうか? --Coolhorse 2009年5月18日 (月) 11:59 (UTC)
- おっしゃる通り、修正が必要だと思います。間違いだと思った場合は、修正が大規模であったりしない限り、ノートでそのつど確認を取らなくてもかまわないと思いますよ。--Ajedony 2009年5月27日 (水) 10:36 (UTC) と、いうわけで修正しました。--Ajedony 2009年5月27日 (水) 10:52 (UTC)
C言語/標準ライブラリ以下のページに書く、関数などのテンプレート
[編集]これからC言語/標準ライブラリ以下のページを書いていこうと思うのですが、 書く前にページの雛形を考えて、書式を統一したいと思います。 現在考え中です。何かいい考えがあったら書き込んでください。 Toya shiwasu(トーク) 2013年1月7日 (月) 14:52 (UTC)
テンプレート案
- 形式
- 引数
- 返却値
- 機能
- 例
Toya shiwasu (トーク) 2013年6月13日 (木) 01:12 (UTC)
- 「形式」と「引数」に分けずに引数などを全てまとめてしまえば良いと思います。例えば fgetc なら
int fgetc(FILE *p);
のように書けば多くの情報を一箇所にまとめることができて可読性も上がるのではないかと。特別に説明したほうが良い場合は別途に説明を付け加えるくらいのものでいいのではないでしょうか。--Angol Mois (Talk/Log) 2016年3月30日 (水) 04:41 (UTC)
- 形式にはそのように書きますが、それだけでは引数と返却値の型しかわからないので、引数と返却値の項目は必要かと思います。例えばfgetc関数は現在このように記述していますC言語/標準ライブラリ/入出力#fgetc関数Toya shiwasu (トーク) 2016年7月13日 (水) 13:48 (UTC)
- 可読性については、概要の節を設けて、そこで形式と機能のみを記述した表を作ろうかと思います。Toya shiwasu (トーク) 2017年3月15日 (水) 11:52 (UTC)
(Ef3のコメント)
- DLを使った編集を多くしたあと、このトークの話題にきがつきました。以下のようなフォーマットで編集しています[2]。
- 編集例
=== strcpy関数 === ; 形式 : <syntaxhighlight lang=c> #include <string.h> char *strcpy(char * restrict s1, const char * restrict s2); </syntaxhighlight> ; 引数 :s1 コピー先の文字列 :s2 コピー元の文字列 ; 返却値 :s1の値 ; 機能 :s2が指す文字列(終端ナル文字を含む)をs1が指す配列にコピーする。 :s1とs2が重なっている場合、その動作は'''未定義'''である。 :返却値はs1の値を返す。 ; 例 : <syntaxhighlight lang=c> #include <stdio.h> #include <string.h> int main(void) { char s1[16] = "abc"; char s2[16] = "def"; printf("コピー前のs1の値:%s\n", s1); printf("コピー前のs2の値:%s\n", s2); strcpy(s1, s2); printf("コピー後のs1の値:%s\n", s1); printf("コピー後のs2の値:%s\n", s2); } </syntaxhighlight>
- レンダリング
strcpy関数
- 形式
#include <string.h> char *strcpy(char * restrict s1, const char * restrict s2);
- 引数
- s1 コピー先の文字列
- s2 コピー元の文字列
- 返却値
- s1の値
- 機能
- s2が指す文字列(終端ナル文字を含む)をs1が指す配列にコピーする。
- s1とs2が重なっている場合、その動作は未定義である。
- 返却値はs1の値を返す。
- 例
#include <stdio.h> #include <string.h> int main(void) { char s1[16] = "abc"; char s2[16] = "def"; printf("コピー前のs1の値:%s\n", s1); printf("コピー前のs2の値:%s\n", s2); strcpy(s1, s2); printf("コピー後のs1の値:%s\n", s1); printf("コピー後のs2の値:%s\n", s2); }
(すじにくシチューのコメント)
上記のEf3さんのコメントの直前に、
- (Ef3のコメント)
と追記しました。wikiのトークページではこのような書式が慣習ですので。これがないと、発言者が分かりづらくなるので、次からお願いします。--すじにくシチュー (トーク) 2024年3月2日 (土) 11:03 (UTC)
「配列とポインタの基本」について
[編集]> 式の中では、配列は「その先頭要素へのポインタ」に読み替えられる。
読み替えられない反例があります。
反例1
int a[10]={2,3,5,7,11,13,17,19,23,29};
printf("%u\n", sizeof a); //40
printf("%u\n", sizeof &a[0]); //4
反例2
int *pa;
pa = &(a); //type mismatch
pa = &(&a[0]); //not lvalue
配列とポインタを混同していては正しい理解に達し得ないので、この説明は不適切と指摘します。
[代案]
配列は集合でありそれ自体は値を持たない。持たないはずの値を使おうとすると、先頭要素のポインタに読み替えられる。
--IPアドレス 240d:0:6a19:cc00:f54c:57a9:373c:3a1 による 2017年4月19日 (水) 00:13 のコメント
- (すじにくシチューのコメント)IPアドレス氏の署名が抜けているので追記しました。今後はトークページの発言の最後には署名をお願いします。--すじにくシチュー (トーク) 2024年3月2日 (土) 11:06 (UTC)
この教科書『C言語』の議論の経緯から、入門的な内容から書く教科です。もっと後半の単元に移動するか、入門者が見ても学べるように編集しなおしてください。
どうも現状の編集では、ハンドブックやリファレンスマニュアルなどと混同しているフシがあるように見えます。そういうページも必要とは思いますが、書く場所が不適だと思います。--すじにくシチュー (トーク) 2024年3月2日 (土) 11:18 (UTC)