• 締切済み

サブルーチン Perl みたいに C言語 で使うには 

いままで数年HPを運営していたためにCGIを開発する手段として、Perl言語を使用してきました。その後、あるきっかけでC言語をするようになり、理屈上PerlとC言語が似ていました。 いままで、Perlでは開発・デバッグ等を効率よくするためサブルーチンを他のファイルにパッケージファイルとして開発していました。非常に便利でこれがC言語でも同じく使えたらいいなとつくづく思っています。 Perl言語の例 main.cgi(本体のファイル) package.pl(パッケージファイル) 本体ほファイルで実行させ、実行の途中必要なサブルーチンをパッケージファイルから呼び出します。 呼び出すには、 %渡す値=&パッケージ名::サブルーチン名; 同じようにC言語でやるときはどのようにすればいいのでしょうか?

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> リンクってどうすればいいのですか? > ちなみにVC++つかってます。 VC++であれば、CLの引数にソースファイル名またはオブジェクトファイル名を渡せばリンクまでやってくれます。統合環境でのやりかたは...実際にやってみればすぐわかります。それでも駄目ならマニュアルを読んでください。

nVIDIA
質問者

お礼

わかりました。やってみます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

外部結合を使います。 関数の定義を別のソースファイルで行い、それぞれをコンパイルした後、リンクします。 関数を呼び出す側では、関数原型(プロトタイプ)を宣言するようにしてください。 具体的には、 /* A.c */ #include <stdio.h> int add(int lhs, int rhs); int main(void) {  printf("%d\n", add(1, 2));  return 0; } /* B.c */ int add(int lhs, int rhs) {  return lhs + rhs; } 上記のA.cとB.cをそれぞれコンパイルした後、リンクすれば、mainからaddが呼び出されます。

nVIDIA
質問者

お礼

最近、ユーザー関数について習い始めたので、直接先生にきいいてみます。

nVIDIA
質問者

補足

リンクってどうすればいいのですか? ちなみにVC++つかってます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    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
  • ***.cgi内のサブルーチンにアクセス

    とあるスクリプトを見ると、htmlページのボタンで***.cgi?サブルーチン名 へリンクさせるものがあって、特定のサブルーチンにアクセスするようになっているのですが、自作スクリプトでこのようなことを真似てもそのサブルーチンだけが呼び出されず、普通に***.cgiにアクセスした状態になります。過去の記事で***.cgi?変数名=***として、Perl側でifを使って操作させるというのを見つけましたがそれではなく、直接特定のファイルの特定のサブルーチンにアクセスしているようなのですが、どうすればできるのでしょうか?

  • なぜ CGI は Perl 言語で作成/動く環境が多いのか。

    最近 CGI に興味をもちここで質問しながらネット検索をしました。 すると Perl 言語での CGI サンプルが一番多く C 言語で作る CGI の サンプルが少し見つかりました。 私の使っている無料サーバーでも CGI は使えますが Perl 言語だけ有効です。 セキュリティの問題で SSI と組み合わせた C 言語の CGI は実行出来ないようです。 質問内容: (1)なぜ CGI は Perl 言語が一番多いのか?→PHP、Cもあるのに (2)なぜ無料サーバーの多くが Perl 言語しか使えないのか? (3)処理の重い CGI を使うとサーバーがダウンするので使わないようにと  私の使っている無料サーバー(infoseek)でなっています。どの程度の  処理のことでしょうか? 上記の3つまたは1つでもアドバイスをして欲しいです。 回答をお待ちしています。

    • ベストアンサー
    • CGI
  • 「.pl」ファイルはサブルーチンのようなものなのですか?

    掲示板スクリプトなどを落としてファイルを見ると、「.pl」というファイルがたまにあります。 これはサブルーチン的なやくわりがあるのですか? もしそうなら、どうしてわざわざ「pl」に書き分ける必要があるのでしょうか。すべてひとつの.cgiに書けばいいのに。

    • ベストアンサー
    • Perl
  • サブルーチンを外部ファイルでまとめる。

    幾つかのサブルーチンを複数のCGIで利用します。 現在は各CGIにまったく同じサブルーチンを書いていますが、美しくないです。 これを別ファイルにまとめて呼び出して利用と言うのは出来ないのでしょうか? 試しに「set.pl」や「set.ini」でサブルーチンを保存し、「require」で呼び出そうとしたのですが、500エラーが出ました。 何か設定が必要でしょうか?

    • ベストアンサー
    • Perl
  • CとPerlどれくらい違うか?

    すでにPerlで書いてあるCGIを C言語で書き直そうか検討中です。 そこで質問なのですが・・・ (1)「CのCGIは速い」とよく書いてありますが、 どれくらい速くて、どれくらいサーバの負担を軽減できるのでしょうか。 (2)実際に計測する方法はありますか?

    • ベストアンサー
    • CGI
  • 別ファイルのサブルーチン

    別ファイル(chiiki.pl)のパッケージ内にあるサブルーチンの処理を使用するために require './chiiki.pl'; CHIFOU::postlimit; に書いたのですが、エラーとはならないもののまったく動きません。 別ファイルchiiki.plは package CHIFOU; sub postlimit { いくつかの処理 } 1; となっていますがどこか問題があるのでしょうか?

  • c言語とperlのcgi設定方法

    (Arch linuxにてlighttpdサーバを立ち上げています) cgiは一般にperlが多いとは思いますが、C言語からのcgiも試みています perlによるcgiを有効にするにはlighttpd.confの設定に以下を追加  server.modules += ( "mod_cgi" )  cgi.assign = ( ".cgi" => "/usr/bin/perl")  static-file.exclude-extensions = ( ".cgi" ) C言語から作成したcgiを有効にするにはlighttpd.confの設定に以下を追加  server.modules += ( "mod_cgi" )  cgi.assign = ( ".cgi" => "")  static-file.exclude-extensions = ( ".cgi" ) 同一のサーバ下で「"/usr/bin/perl"」「""」ともにを有効にする設定方法はありますでしょうか よろしくお願いいたします

  • requireしたライブラリにuseを記入

    メール送信のプログラムを作っています。 本体のプログラムmain.cgiから、 メール送信用のサブルーチンを記入した、 email.plというのを require 'email.pl'; とメール送信が必要な場合だけ読み込んでいます。 この email.plに use Encode; や use Jcode; のようにuse文を記入するのは、 Perlの作法としては適切なのでしょうか。 それともuse文はmain.cgiに記入するのが適切なのでしょうか。 email.plにuse文を記入しても動きますし、 main.cgiにuse文を記入した場合とベンチマークを比べたりしましたが あまり変わらないのですが、 useはコンパイルしたときに実行されるので、 実行のときに読み込まれるrequireしたライブラリに記入していいのか不安なのです。 私としては必要なときだけ読み込みたいので、 email.plにuse文を記入したいのですが。 どうぞよろしくお願いします。

  • perl言語について

    いままで、Visual C++製品を使用してC言語を覚えてきました。 cgiを作成したいとおもい、perlを覚えようとしています。 不満、不安があるのですが、 Visualな画面で変数に色をつけてみたり、 自動インデントしてくれたり、 デバッガがあったり、、、 PerlのIDEはありませんか? 初心者にメモ帳はつらいです。 後、Perl言語に変数すべてに$がついているはみにくくていやです。型がなくて不安です。 それから、print "Hello";のprintは、どうして&print ではないのですか? 後、書籍は買ったほうがよろしいでしょうか? くだらない内容かもしれませんがお答えいただけると助かります。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • 中古のNEC MATE PC-MKL36LZ7AAS3を購入したが、HDDがなかったため、自分で2.5インチのSSDを取り付けることにした。
  • しかし、SSD/HDDのマウンターやHDD組み込みユニットがないことに気づいた。
  • この場合、amazonや他のオンラインショップでHDD組み込みユニットを購入することができるのかを知りたい。
回答を見る

専門家に質問してみよう