質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

3088閲覧

C言語入門書のコードがコンパイルできない

Gustave

総合スコア21

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2015/12/16 04:39

編集2015/12/16 04:42

教育目的で,Cのサンプルコードを集めています.

戸川隼人 UNIXワークステーションによる科学技術計算ハンドブック基礎篇
という本のソースコードが下記のURLに落ちていました.

http://nyan11.ciao.jp/B/NA/EWSNA/linkANNA.html

しかし,ここに載っているコードがコンパイルできません.
実行方法は,"gcc AINVB6.C"としています.

エラーの多くは変数宣言や関数定義によるもので,例えばリンクの一番上からダウンロードできるAINVB6.Cには,以下の様な関数(抜粋)があります.

C

1pm( a , n , nn ) 2double *a ; 3int n,nn ; 4{ 5 int i,j; 6 double *ai; 7 for ( i=0 , ai=a ; i<n ; ++i , ai+=nn ) 8 { 9 for ( j=0 ; j<n ; ++j ) 10 printf("%15.7lf ",ai[j]) ; 11 printf("\n") ; 12 } 13 printf("\n"); 14}

これはなんでしょうか?関数の型も不明ですし,2,3行目の変数宣言も謎です.
コード全体において関数はこのような形です.

このような記法のCがあるのでしょうか?あるとしたら,gccでのコンパイルオプションはなんでしょうか?

追伸:

AINVB6.Cを選んだのは一番上に記載があったからです.他の全てのコードにおいて同様の記法が用いられていました.(このコードだけの問題では無いようです.)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

これは相当古いソースですね。ANSI規格に制定される前の、いわゆるK&R方式です。
あまりにも古いので教育目的で使うことにはお勧めできません。
オプションでどうにかなるのかは判りませんが、もし使うのであれば、今後のことを考えてソースを修正した方が良いです。

C

1pm( a , n , nn ) 2double *a ; 3int n,nn ; 45void pm( double *a , int n , int nn ) 6//↑ returnがある場合は、voidでなくその型にします。

投稿2015/12/16 05:08

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gustave

2015/12/16 05:19

K&R形式についてあまり知識がありませんでした. 教育用に使うかどうかはさておき,コードの意味はわかりました.ありがとうございます.
Orlofsky

2015/12/16 23:42

知らないでK&R本を買ったのでしょうけど、今更 K&R方式で勉強しても、ライフルに火縄銃で対抗するような気も? (^_^;;
guest

0

ベストアンサー

関数の型も不明ですし,

Cに於いて、型のデフォルトはintです。int型の時はintを省略できます。

2,3行目の変数宣言も謎です.

これは、CのANSI規格ができる前のCの伝統的な書法です。
ANSI-Cで関数のプロトタイプ宣言が導入され、関数頭書きの書法も今の形式に変わりました。

gccでのコンパイルオプションはなんでしょうか?

gcc (GCC) 4.4.7 でオプション無しで問題なくAINVB6.Cをコンパイルできましたよ。

投稿2015/12/16 04:57

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gustave

2015/12/16 05:17

ありがとうございます. 全部まとめてコンパイルしてエラーが出ていて,エラー分析をあまりしていなかったのですが, a.c: トップレベル: a.c:216:1: エラー: プログラム内に逸脱した ‘\32’ があります と出ていたので,文字コードか何かだと思います.とりあえず1行目を削除して動きました. ありがとうございます.
Chironian

2015/12/16 05:21

> gcc (GCC) 4.4.7 でオプション無しで問題なくAINVB6.Cをコンパイルできましたよ。 未だにこの記法をサポートできていることにびっくり。 C/C++の規格を決めている人たちって凄いですね。
otn

2015/12/16 06:50

> 未だにこの記法をサポートできていることにびっくり。 とはいえ、gccの--traditionalオプションはサポート外になっているんですよね。
guest

0

これは、ANSI規格化される前の、「K&Rスタイル」と呼ばれる古い書き方のC言語です。void型がなかったり、引数の型が変数宣言のように書いてあったりします。

現代流に書きなおせば、この関数の宣言はvoid pm(double* a, int n, int nn)という意味です。

投稿2015/12/16 05:00

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

書式は、他の形が書かれているように、K&R Cと呼ばれているものですね。

コンパイルエラーとなるのは、おそらく拡張子が大文字の.Cであるためではないかと。小文字に変えてみてください。

gccでは大文字.CはC++とみなされます。C++で許されている書式ではないのでエラーとなっているのかと。

投稿2015/12/16 05:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問