私は、C言語を勉強中のものですが、
「ルーチン」という言葉は具体的にどういう意味なのですか、
お教えください。

C言語では、「関数」と同義語でしょうか。


「新ANSI C言語辞典」(平林雅英 著、 技術評論社)の「ルーチン」の説明:

定められた処理をするためのプログラムのひとかたまり

このQ&Aに関連する最新のQ&A

A 回答 (3件)

まず、関数と同義語ではありません。



ルーチンと言うのは主観で決まると言うのもあながち嘘ではありません。
メインルーチン、サブルーチン、~処理ルーチンなどまさに設計者の主観によります。

一つだけ言えるのは1命令でルーチンと言うことはまず無いと言うことです。
数命令以上が集まって所定の目的を果たすもの、ということで、極端な例としてはプログラム=ルーチンと言うこともあるということでしょう。

この考え方から行けば、関数の中に沢山のルーチンがあったり、ルーチンの中に関数が沢山あっても一向に不思議ではありません。

要は設計者が、どの部分をルーチン(ひとかたまりの仕事)と認識するかにかかっているわけですから。(~処理部と言う程度の意味なのですから)
    • good
    • 1
この回答へのお礼

>ルーチンと言うのは主観で決まると言うのもあながち嘘ではありません。

ということは、プログラミングの本にこの言葉が出てきたら、具体的に何をさすかはその文脈で判断する必要がありそうですね。

お礼日時:2001/11/12 22:20

回答できるほど分かっているのではないのですが,


関数とは同義ではないです.
「定められた処理をするためのプログラムのひとかたまり」
関数の中にも,ルーチンがいくつもあったり,
関数が幾つか集まってルーチンになったりです.

この回答への補足

>関数の中にも,ルーチンがいくつもあったり,
>関数が幾つか集まってルーチンになったりです.

この部分はなるほどなあ、と思いました。

>関数とは同義ではないです.
>「定められた処理をするためのプログラムのひとかたまり」

ただ、何を「ひとかたまり」と捕らえるのかは、人によって違う可能性があるように私は思ってしまいます。
「ルーチン」というのは、そういう、主観的な言葉なのでしょうか。(そうかもしれません。)


「プログラミング言語C」(カーニハン ・ リッチー 著)という本では「ルーチン」という言葉を次のように使っています。

―――――――――――――引用―――――――――――――
 静的なメモリは通常の宣言にstaticということばを付けて指定される。そこで次の二つのルーチンと二つの変数が、一つのファイルにコンパイルされると、

 static char buf[BUFSIZE]; /* ungetch 用のバッファ */
 static int bufp = 0; /* buf 中の次の空き位置 */

 int getch(void) { ... }

 void ungetch(int c) { ... }

他のルーチンから buf と bufp へのアクセスは不可能となる。これらは、同じプログラムの他のファイル中の同じ名前とは衝突しない。
―――――――――――――引用ここまで―――――――――

補足日時:2001/11/11 22:38
    • good
    • 0

gooの国語辞書検索機能(三省堂 大辞林第2版)で検索したらありますよ。



確かに通常の仕事でも、決まりきった手続きにのっとった処理を「ルーチンワーク」といいますよ。

特別な判断を必要としない、と言うことでしょう。
(プログラムされているから)
プログラムを演奏会などのプログラム(式次第)と解釈すれば
「きまりきった流れ」の意味がつかみやすいのでは?

参考URL:http://dictionary.goo.ne.jp/cgi-bin/dict_search. …

この回答への補足

ありがとうございました。

参考URLによると、「コンピューターのプログラムの部分をなし、ある機能をもった一連の命令群。」ですね。

意味はわかりました。
で、具体的には、for文とかif文とかswitch~case文とか、でしょうか。

ご回答にある「きまりきった流れ」というのは、私には、「プログラム」と同義語に感じられてしまいます。

補足日時:2001/11/11 22:09
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「ルーチン」という言葉の意味

私は、C言語を勉強中のものですが、
「ルーチン」という言葉は具体的にどういう意味なのですか、
お教えください。

C言語では、「関数」と同義語でしょうか。


「新ANSI C言語辞典」(平林雅英 著、 技術評論社)の「ルーチン」の説明:

定められた処理をするためのプログラムのひとかたまり

Aベストアンサー

まず、関数と同義語ではありません。

ルーチンと言うのは主観で決まると言うのもあながち嘘ではありません。
メインルーチン、サブルーチン、~処理ルーチンなどまさに設計者の主観によります。

一つだけ言えるのは1命令でルーチンと言うことはまず無いと言うことです。
数命令以上が集まって所定の目的を果たすもの、ということで、極端な例としてはプログラム=ルーチンと言うこともあるということでしょう。

この考え方から行けば、関数の中に沢山のルーチンがあったり、ルーチンの中に関数が沢山あっても一向に不思議ではありません。

要は設計者が、どの部分をルーチン(ひとかたまりの仕事)と認識するかにかかっているわけですから。(~処理部と言う程度の意味なのですから)

QC言語C++言語アセンブラ言語の就職先

自分は以前Javaプログラマをやってました。

あまりに、便利なライブラリばかりで、「なんかプログラムを書いているというより、ソフトウェアの振る舞いを書いているだけだ。。」とおもってしまい、すきになれませんでした。正直、苦痛でした。

今、上記言語を勉強しているのですが、コンピュータの根本からプログラムをしている実感が沸き、とても面白いです。

でも、これらの言語を習得したところでどんなところに就職できるのかさっぱりわかりませんし、需要があるのかもしりません。いわゆる組み込み系統は就職できるんでしょうが、私としてはアルゴリズムでUNIXのプログラムをシコシコ書いているような作業がすきなのです。いってみれば、私はクラシックな人間だとおもいます。

そんな僕ですが、就職先はあるのでしょうか?よろしくお願いします。

Aベストアンサー

 勉強熱心ですね。
 実際に、kamkamkam3-san の言われている、
「なんかプログラムを書いているというより、ソフトウェアの振る舞いを書いているだけだ。。」というのは的を得ています。
 
 経験からなんですが、ソフトウェア会社では、ノウハウとしてライブラリをもっています。ちょうど、Java のクラス・ライブラリーなようなものです。ですから、それらを使って製品を効率良く製品をつくれるかが重要です。実際のソフトウェア・エンジニアは、それをうまく使って効率良くコーディングすることを要求されます。

 ソフトウェア業界は、1人で閉じた製品を開発することは、まずないです。製品=プロジェクトだとすると、最低3名~100人以上が同時進行となります。そうなると、割り当てられたノルマを効率良く行うかが評価のポイントになります。つまり、「ソフトウェアの振る舞いを書いているだけ」ということにもなります。

 コンピュータ言語は、あくまでもツール(道具)です。
 kamkamkam3-san が、今後どういった分野の仕事を希望している(興味がある)かが重要だと思います。
 その答えとして、「C言語C++言語アセンブラ言語」を勉強することで実感できると思います。ですので、ぜひ、勉強を続けてください。

 勉強熱心ですね。
 実際に、kamkamkam3-san の言われている、
「なんかプログラムを書いているというより、ソフトウェアの振る舞いを書いているだけだ。。」というのは的を得ています。
 
 経験からなんですが、ソフトウェア会社では、ノウハウとしてライブラリをもっています。ちょうど、Java のクラス・ライブラリーなようなものです。ですから、それらを使って製品を効率良く製品をつくれるかが重要です。実際のソフトウェア・エンジニアは、それをうまく使って効率良くコーディングすることを要求さ...続きを読む

QCGIでこのサブルーチンはどうゆう意味があるのでしょうか??

タイトルどうりなのですが、CGIでこのサブルーチンはどうゆう意味があるのでしょうか??

メールアドレスがおかしかったら警告するような感じはなんとなく分かるのですが、実際にアドレスがどうだったら発動(?)するのでしょうか??
どうかよろしくお願いします。

sub MailAddressCheck {
my($email) = @_;
unless($email=~/^\w[\w\-\.]*\@\w[\w\-\.]+[a-zA-Z]{2}$/) {
&ErrorPrint("メールアドレスが正しくありません。");
}
if($email =~ /,/) {
&ErrorPrint("メールアドレスが正しくありません。");
}
}

Aベストアンサー

Perl の正規表現において、「\w」とは「アルファベット、数字、アンダーバー」
のいずれかである文字であると定義されています。
つまり [A-Za-z0-9_] と同じです。
# 「\w」は「単語(word)構成文字」の略です。

だから、手っ取り早くこのエラーが見たいのなら、
メールアドレスの先頭をこれ以外の文字にすればいいのです。
「.」で始めてみるとか。また、最後が数字で終わることも許されませんので、
わざと数字にしてみるのもいいでしょう。
もちろん、「@」がなければこれもエラーです。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k08.htm,http://www2.famille.ne.jp/~akio1998/l_grep.html

QC言語のファイル処理 C言語

指定したファイルのなかの文字列を表示させたいです。
最後の2行だけ表示させたいのですが、どうやっていいのかわかりません。。。また、それ2行を、入力した出力ファイルに書き込みたいのですが・・、どうやって指定したらいいのでしょうか??
わかる方よろしくです(><)

Aベストアンサー

>最後の2行だけ表示させたいのですが
2行文のバッファを用意し、ファイルを一行ずつ読みバッファの内容を更新していけば良いのでは?

なんとなくなフロー
char buffer[],last[],last2[];
FILE *fp;
fp = fopen(・・・)
while(fgets(buffer, sizeof(buffer), fp) != NULL){
strcpy(last2, last);
strcpy(last, buffer);
}
printf("%s\n%s\n", last2, last);

>また、それ2行を、入力した出力ファイルに書き込みたいのですが・・
もう少し具体的に書いていただいた方がわかりやすいと思いますが・・・

Qサブルーチンを認識しません。

perlプログラムで
サブルーチンの中で、別のサブルーチンを呼び出していますが、
なぜか認識しません。
KCatchでは以下の表示をしています。
Catch: Mon Sep 22 07:56:36 2003
-------------------------------------------------
[regist.cgi:375:die] Undefined subroutine &main::lock called.
>&lock;
-------------------------------------------------
regist.cgi with Perl 5.00502 for freebsd

サブルーチン名には頭に & を付けて呼び出しています。
サブルーチンは、スクリプトの最後にまとめてあります。
同じサブルーチンは、他のスクリプトでも利用していますが、
エラーは出ていないのですが。

何が原因か、わかりません。
関係ないかもしれませんが、プログラム最初の方でuse strict;の宣言をしています。
他のサブルーチンも認識しません。
KCacthの表示は同じ
&main::サブルーチン名 called になっています。
よろしくお願いします。

perlプログラムで
サブルーチンの中で、別のサブルーチンを呼び出していますが、
なぜか認識しません。
KCatchでは以下の表示をしています。
Catch: Mon Sep 22 07:56:36 2003
-------------------------------------------------
[regist.cgi:375:die] Undefined subroutine &main::lock called.
>&lock;
-------------------------------------------------
regist.cgi with Perl 5.00502 for freebsd

サブルーチン名には頭に & を付けて呼び出しています。
サブルーチンは、スクリプト...続きを読む

Aベストアンサー

下記前提でよいでしょうか。
&lock(); ・・・(lockを呼び出している箇所)

sub lock    ・・・サブルーチン:lockの定義
{
・・・
}
上記は1つのソースファイル上にある。

とすると、考えられるのは、
1.undef (&lock); により未定義にしている。
2.__DATA__のあとにsub lockを定義している為、サブルーチンとして認識されない。(__END__も同様)
です。上記の2点はOKでしょうか?

QC言語もしくはC++言語プログラマになれますか?

私は30歳になったばかりです。諸事情によりずっと家にいます(母親の病気などです)。

5年ほど前JavaでWebシステムを作っていましたが、やめました。それ以降もJavaやPHP、VB.NETなどやってはいるんですが、なかなか腰を落ち着けられません。

私は本来の性格として基礎固めが大好きというか基礎がしっかりしていないと意味がないと考えてしまうタイプです。こと、プログラムに関しても、コンピュータの仕組みから理解してアセンブラやらの書物を読み、C言語を勉強したりするとコンピュータを根本から理解できて、やっと自分の役に立つという思考しかできないものです。いきなり高級言語のJavaやらC#やら.NETやらやっても、うわべだけさすってるようで、根本的な理解を得られないので(コンピュータに対する)、無駄だなあとどうしても感じてしまうのです。また、それよりも基礎からしっかり積み重ねた方が後々、新しい言語ができても理解の度合いというかどっしりと理解できるとおもうのです。

しかし、就職のことを考え、PHPやらC#やらJavaやらVB.NETやらを優先してきてどれもどっちつかずになってしまいました。当然Cなども合間をぬってやっていました。

で、私は、そのどっちつかずな状態がいやなので、CとC++に絞って勉強することにしました。で、低級コンパイラの中身やアセンブラも勉強していこうと決心しました。しかし、就職のことを考えると不安です。

あと、1年みっちり勉強するとして、CやC++の就職先はあるのでしょうか?自分としては、働ける限り年齢がいくつになってもがんばりたいとおもうのですが、なにしろ世間的にいうと全く遅い年齢です。もし、励ましになるような事もありましたら、ご回答していただければ、うれしいです。よろしくお願いします。

私は30歳になったばかりです。諸事情によりずっと家にいます(母親の病気などです)。

5年ほど前JavaでWebシステムを作っていましたが、やめました。それ以降もJavaやPHP、VB.NETなどやってはいるんですが、なかなか腰を落ち着けられません。

私は本来の性格として基礎固めが大好きというか基礎がしっかりしていないと意味がないと考えてしまうタイプです。こと、プログラムに関しても、コンピュータの仕組みから理解してアセンブラやらの書物を読み、C言語を勉強したりするとコンピュータを根本から理解で...続きを読む

Aベストアンサー

ゲームメーカーに勤めているものです。
Windowsを含め市販のパッケージゲームはほとんどがC/C++で作られています。
(ゲームがハードよりだとは思いません)
この業界は学歴とかは関係なく実力オンリーの世界です。
MIT卒も専門卒も同じ土俵です。うちは大手ですが中途採用で学歴を見る事はありません。
>私は零細企業くらいにしか入れないとおもっていますので(学歴がないので)、
何かコンプレックスをお持ちのようですが、逆にそういうオーラがでていると
面接で悪い印象を与えてしまうと思います。
>仕事を選らべる年齢とは思っていないので
もう少し欲を持った方が良いと思います。
40歳で新しい業界に転進しようとしている人がいたとしても
努力が伴っていれば、誰もおかしいとは思わないでしょう。

C言語というのはゲームに限らず性質的に下位層のものを作る事が多いです。
既に話が上がっているようにモジュールを作る仕事もあるわけですが
例えば圧縮や暗号化等のモジュールを作ろうとすると数学の知識も必要です。
C/C++の言語仕様に関する知識だけでは、年齢も考えると就職は厳しいかもしれません。
アセンブラは武器になると思います。アセンブラの経験者は減ってきていますが
需要はあります。
特に下位層の部品は実行速度が重要ですのでインラインアセンブラが使われている事は
よくあります。

>1年みっちり勉強するとして、CやC++の就職先はあるのでしょうか?
可能性はあります。
kamkamkam3さんがゲームに興味があるかどうかはわかりませんが、
例えばシェーダーをバリバリ使った誰もがうなる3Dゲームを作って会社に持ち込めば
ひっぱりだこになるでしょう。

ゲームメーカーに勤めているものです。
Windowsを含め市販のパッケージゲームはほとんどがC/C++で作られています。
(ゲームがハードよりだとは思いません)
この業界は学歴とかは関係なく実力オンリーの世界です。
MIT卒も専門卒も同じ土俵です。うちは大手ですが中途採用で学歴を見る事はありません。
>私は零細企業くらいにしか入れないとおもっていますので(学歴がないので)、
何かコンプレックスをお持ちのようですが、逆にそういうオーラがでていると
面接で悪い印象を与えてしまうと思います。
>仕...続きを読む

Qcobol サブルーチンのlink

cobol言語プログラミングでの質問です。
サブルーチンで 【ダイナミックLINK】と【スターティックLINK】というのがあるようですが、どのような違いがあるのでしょうか?今、私の認識は以下の通りなのですが正しいでしょうか??→例えば、ダイナミックはサブルーチンを修正し、コンパイル完了するとメインをコンパイルしなくてもサブルーチンの修正が反映される。スターテックはサブルーチンを修正し、コンパイル完了してもメインをコンパイル完了するまではサブルーチンの修正が反映されない。どうでしょうか????

Aベストアンサー

ちょっと惜しいです。
スタティックリンクは、メインルーチンとサブルーチンが一体化されてリンクされて1つのモジュールになっています。サブルーチンを修正&コンパイルしたら、メインルーチンと再リンクが必要です。
ダイナミックリンクは、メインルーチンとサブルーチンが別々にリンクされそれぞれ独立したモジュールになっています。サブルーチンを修正&コンパイルしたら、サブルーチンの再リンクが必要ですが、メインルーチンを再リンクする必要はありません。

多くのメインルーチンで使われているサブルーチンを修正した場合、スタティックリンクだと多くのメインルーチンの再リンクが必要ですが、ダイナミックリンクだと不要です。

QC言語はC言語でできている?

C言語はC言語でできている?

C言語はC言語でできていると耳にしたことがあります。

一体どういうことですか?

詳しく教えて下さい。

Aベストアンサー

歴史的な経緯を考えれば解ると思います。

当初は機械語でプログラミングをしていました。
それがアセンブラに変わります。
アセンブラでコンパイラが作成され、高級言語が作られていきます。
アセンブラまたは、高級言語の1つを使って、C言語用のコンパイラが作成されたとします。
今度は、そのC言語用のコンパイラを使用して開発ができるわけです。
ですので、そのC言語用のコンパイラを使用して、
C言語用の別のコンパイラを作成することも可能になります。

おそらく質問者さんの聞かれていることはこのことだと思います。

他の例では、MSは、VisualStudioで、次のバージョンのVisulaStudioを開発しています。
ややこしいですね。><

Q初歩的な質問なのですが、サブルーチン、プロシージャについて

初めてプログラミングを行おうと思っています。
そこで、VBを使って行おうと思っているのですが、
全てが初めてなので、まずは本を読んでいるところです。

本の中で、サブルーチンやプロシージャという言葉がよく出てくるのですが、サブルーチンは処理のかたまり、プロシージャは処理の命令と軽く考えていたのですが、本の中に、『サブルーチンにはFunctionプロシージャとSubプロシージャの2種類がある』と書いてあり、それ以来、私にはサブルーチンもプロシージャも同じものに思えてしまいます。人に聞いたところ、『全然別ものだよ』という答えしかありませんでした。これは、どう違うのでしょうか??
また、SubプロシージャのSubはサブルーチンを示すとあり、益々、理解できなくなりました。
恐れ入りますが、サブルーチン、プロシージャ、Functionプロシージャ、Subプロシージャとは何かについて、おわかりの方がいらっしゃいましたらご教授ください。

宜しくお願い致します。

Aベストアンサー

「サブルーチン」とは、処理のまとまりのことです。
これはあくまでもVBだけの概念ではなく、プログラミング言語の一般的な概念です。
つまり、何らかの論理的な処理のまとまりを決めた単位です。
例えば、「データベースを更新するサブルーチン」「ソートをを行うサブルーチン」という具合に使います。

一方、「プロシージャ」はVBのみの概念です(他の言語にも「プロシージャ」はありますが、ここでいいたいのは言語特有の概念であり、一般概念ではないという意味)。
そしてその「プロシージャ」にはFunctionとSubの2種類があります。
「プロシージャ」の意味は、一般概念である「サブルーチン」をVBでは「プロシージャ」という単位(概念)で表現します、ということです。

ですから、「サブルーチン」は一般概念、「プロシージャ」はVB内での「サブルーチン」を表現した概念です。
つまり、「サブルーチン」≒「プロシージャ」と考えて差し支えありません。
違うと言えば違う部分もありますが、少なくとも『全然別ものだよ』というわけではなく、殆ど同じと考えてかまいません。
「ヘッドホンステレオ」と「ウォークマン」の違いのような一般概念と商品名の違い、あるいは、「ステレオ」と「コンポ」のような一般概念ではあるけれど表現の仕方の違い、みたいに考えてください。
いずれにせよ、あまり気にしない方がいいと思います。

ちなみに、「Functionプロシージャ」と「Subプロシージャ」の違いは、戻り値を返すか返さないかだけで他は一緒です。

「サブルーチン」とは、処理のまとまりのことです。
これはあくまでもVBだけの概念ではなく、プログラミング言語の一般的な概念です。
つまり、何らかの論理的な処理のまとまりを決めた単位です。
例えば、「データベースを更新するサブルーチン」「ソートをを行うサブルーチン」という具合に使います。

一方、「プロシージャ」はVBのみの概念です(他の言語にも「プロシージャ」はありますが、ここでいいたいのは言語特有の概念であり、一般概念ではないという意味)。
そしてその「プロシージャ」にはFun...続きを読む

QC言語->アセンブリ->C言語で構造体渡し

OS開発をしています。
たとえば、
typedef struct test{
int t1;
int t2;
int t3;
int t4
int t5;

}test;
という構造体があったとして、


----アプリケーション----
void main(){
test data;
data.t1=100;
data.t5=200;

testint(data);
}

----ライブラリ(アセンブリ)----

_testint:
PUSH EBX
MOV EBX,ESP
INT 0x52
POP EBX
RET

----OS側----

int API(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax){

test data;
data= *(((int *)ebx) + ?);
… // ↑
}
というプログラムのとき、
?には、どのような数字を入れれば、
OS側のdataにアプリ側のdataが代入できるでしょうか。
test構造体のサイズは、
20Byteです。
長い質問ですが、回答お願いします。

OS開発をしています。
たとえば、
typedef struct test{
int t1;
int t2;
int t3;
int t4
int t5;

}test;
という構造体があったとして、


----アプリケーション----
void main(){
test data;
data.t1=100;
data.t5=200;

testint(data);
}

----ライブラリ(アセンブリ)----

_testint:
PUSH EBX
MOV EBX,ESP
INT 0x52
POP EBX
RET

----OS側----

int API(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax){

test data;
data= *(((int *)ebx) + ?);
… // ...続きを読む

Aベストアンサー

答えから言うと2です。
先ず、アセンブラが呼び出された直後は
スタックの先頭に帰り先アドレスがあります。
ここはESP+0の地点です。この後ろにdataが
あるので、dataはESP+4になります。
アセンブラの中でEBXを退避するためPUSHを
行ったので、ESPは-4され、それからEBXに
代入されます。つまり、EBXから見ると、
EBXの元の値、帰り先、dataの順に並んで
います。32bitマシンでは各項目は4バイトなので、
+0:EBXの元の値
+4:帰り先
+8:dataの先頭
という具合です。
但し、C言語ではポインタにおける"+1"は型の
サイズ分を指します。intは4バイトなので、
8バイト先は+2になります。

以下のように分解してみると分かり易いでしょう。

test data;
test *ptr;
int *mid;

mid = (int *)ebx; //★1
ptr = (test *)(mid + 2); //★2
data = *ptr; //★3

★1 int型ポインタにebxを代入する。
★2 data型ポインタにintの2個先のアドレスを設定する。
  先に述べたようにintとしては"2個"先にdataがある。
★3 内部のデータにポインタから内容をコピーする。

答えから言うと2です。
先ず、アセンブラが呼び出された直後は
スタックの先頭に帰り先アドレスがあります。
ここはESP+0の地点です。この後ろにdataが
あるので、dataはESP+4になります。
アセンブラの中でEBXを退避するためPUSHを
行ったので、ESPは-4され、それからEBXに
代入されます。つまり、EBXから見ると、
EBXの元の値、帰り先、dataの順に並んで
います。32bitマシンでは各項目は4バイトなので、
+0:EBXの元の値
+4:帰り先
+8:dataの先頭
という具合です。
但し、C言語ではポインタにおける"+1"は型...続きを読む


人気Q&Aランキング

おすすめ情報