#include f2c.h
上述のヘッダファイルを含むものをVC++6.0をもちいて
コンパイルするにはどのようにしたらよろしいですか?
ご教授ください。宜しくお願いします。
どんなヘッダーファイルを含んでいても、
メニューの「ビルド」-「コンパイル」を選べばコンパイルできます。
エラーが出て困っているという意味でしたら、
そのエラーを提示していただかないと対処法が分かりません。
返信有難うございます。
インクルード ファイルがオープンできません。というエラーが出てしまいます。
このヘッダファイルはFORTRANとCの言語を結びつける役割を果たしていると思います。
このヘッダファイルをVCで用いるにはどのようにしたらよろしいですか?
ヘッダファイルf2c.hはどこかに存在するのでしょうか?
もしないなら、#include f2c.hと書いた人に問い合わせるのが一番です。
ただ、f2cというのは、Fortran から C へ、ソースファイルを自動で
変換する(らしい)プログラムと同名ですので、そのプログラムで
使っているヘッダファイルかもしれません。ベル研究所からDL
できると思います。必要ならこっちの線から調べてください。
ヘッダーファイルのある場所を指定していますか?
VC++6.0の場合、
「プロジェクト」-「設定」の「C/C++」タブで、カテゴリ「プリプロセッサ」を選んで
「インクルードファイルのパス」に設定します。
たいちろうさん有難うございました。
頑張ってみます。
長々と申し訳ないです。
やはりコンパイルができないで皆様のアドバイスをお聞きしたいです。
以下がコンパイルしたいソースです。
何かお気づきの事がありましたらご教授していただければ嬉しいです。
宜しくお願いいたします。
/* Dft8pt.f -- translated by f2c (version 19951025).
You must link the resulting object file with the libraries:
-lf2c -lm (in that order)
*/
#include f2c.h
/* Table of constant values */
static integer c__1 = 1;
/* PROGRAM DFT */
/* Main program */ MAIN__()
{
/* Format strings */
static char fmt_100[] = (f5.0);
static char fmt_200[] = (3f8.3);
/* System generated locals */
integer i__1, i__2;
real r__1, r__2;
olist o__1;
cllist cl__1;
/* Builtin functions */
integer f_open(), s_rsfe(), do_fio(), e_rsfe(), f_clos();
double cos(), sin(), sqrt();
integer s_wsfe(), e_wsfe();
/* Subroutine */ int s_stop();
/* Local variables */
static real a[11], b[11];
static integer i__, j, k, n;
static real p, x[11], y;
/* Fortran I/O blocks */
static cilist io___2 = { 0, 1, 0, fmt_100, 0 };
static cilist io___11 = { 0, 6, 0, fmt_200, 0 };
n = 8;
o__1.oerr = 0;
o__1.ounit = 1;
o__1.ofnmlen = 10;
o__1.ofnm = DFT8PT.DAT;
o__1.orl = 0;
o__1.osta = OLD;
o__1.oacc = SEQUENTIAL;
o__1.ofm = FORMATTED;
o__1.oblnk = 0;
f_open(&o__1);
o__1.oerr = 0;
o__1.ounit = 6;
o__1.ofnmlen = 10;
o__1.ofnm = DFT8PT.TXT;
o__1.orl = 0;
o__1.osta = NEW;
o__1.oacc = SEQUENTIAL;
o__1.ofm = FORMATTED;
o__1.oblnk = 0;
f_open(&o__1);
/* L1: */
s_rsfe(&io___2);
i__1 = n - 1;
for (i__ = 0; i__ <= i__1; ++i__) {
do_fio(&c__1, (char *)&x[i__], (ftnlen)sizeof(real));
}
e_rsfe();
cl__1.cerr = 0;
cl__1.cunit = 1;
cl__1.csta = 0;
f_clos(&cl__1);
p = (float)6.283 / n;
i__1 = n - 1;
for (k = 0; k <= i__1; ++k) {
a[k] = (float)0.;
b[k] = (float)0.;
i__2 = n - 1;
for (j = 0; j <= i__2; ++j) {
a[k] += x[j] * cos(p * j * k);
b[k] -= x[j] * sin(p * j * k);
/* L20: */
}
/* L10: */
}
i__1 = n - 1;
for (i__ = 0; i__ <= i__1; ++i__) {
/* Computing 2nd power */
r__1 = a[i__];
/* Computing 2nd power */
r__2 = b[i__];
y = sqrt(r__1 * r__1 + r__2 * r__2);
s_wsfe(&io___11);
do_fio(&c__1, (char *)&a[i__], (ftnlen)sizeof(real));
do_fio(&c__1, (char *)&b[i__], (ftnlen)sizeof(real));
do_fio(&c__1, (char *)&y, (ftnlen)sizeof(real));
e_wsfe();
/* L30: */
}
s_stop(", 0L);
} /* MAIN__ */
出たエラーを示してもらわないと分からないんですってば。
dairygoodsさんありがとうございました。
そして、何回も申し訳ないです。
f2cのヘッダファイルを用いてコンパイルをしてみたら以下のエラーが出ました。
: error C2660: 'f_open' : 関数が不正な 1 個の実引数をともなって呼び出されまし
た : error C2660: 'f_open' : 関数が不正な 1 個の実引数をともなって呼び出されま
した : error C2660: 's_rsfe' : 関数が不正な 1 個の実引数をともなって呼び出され
ました : error C2660: 'do_fio' : 関数が不正な 3 個の実引数をともなって呼び出さ
れました : error C2660: 'f_clos' : 関数が不正な 1 個の実引数をともなって呼び出
されました : error C2660: 'cos' : 関数が不正な 1 個の実引数をともなって呼び出さ
れました。
: error C2660: 'sin' : 関数が不正な 1 個の実引数をともなって呼び出されました。
: error C2660: 'sqrt' : 関数が不正な 1 個の実引数をともなって呼び出されました
: error C2660: 's_wsfe' : 関数が不正な 1 個の実引数をともなって呼び出されまし
た: error C2660: 'do_fio' : 関数が不正な 3 個の実引数をともなって呼び出されまし
た
: error C2660: 'do_fio' : 関数が不正な 3 個の実引数をともなって呼び出されました
: error C2660: 'do_fio' : 関数が不正な 3 個の実引数をともなって呼び出されまし
た : error C2660: 's_stop' : 関数が不正な 2 個の実引数をともなって呼び出されま
した : warning C4508: 'MAIN__' : 関数に戻り値の型が指定されていません。戻り値
を void 型と見なします。
feedback.exe - エラー 13、警告 1
f2c.h にあるプロトタイプ宣言の形式が旧いんじゃないかな、と。
> -lf2c -lm (in that order)
この意味わかってますか?
>/* Main program */ MAIN__()
1.VCはこのmain 宣言通らんでしょう
>warning C4508: 'MAIN__' : 関数に戻り値の型が指定されていません。戻り値
でも通ってはいるね?
2.>たけし 2003/11/20(木) 19:16:01
で紹介された CまたはCPPソースがあるフォルダと
インクルードしたい f2c.h は同一フォルダに存在しますか
>#include f2c.h
この書き方はそんな意味を持ってますよ
3.f2c.h のなかで さらに#include はありますか?
#include <stdio.h> なり
#include <iostream.h>
4.
> /* Builtin functions */
> integer f_open(), s_rsfe(), do_fio(), e_rsfe(), f_clos();
ここ と
> o__1.oacc = SEQUENTIAL;
> o__1.ofm = FORMATTED;
> o__1.oblnk = 0;
> f_open(&o__1); ←ここ
の使い方
C++上ではオーバーロード宣言されてなければこんな使い方出来ないはずですが
>error C2660: 'f_open'
このエラーから察するに 1つしか宣言されていないのではないでしょうか
> f_open(&o__1);
構造体 ポインタとかを欲しがってますよね?
5.知識不足で理解不能 ここの使い方?
> /* Builtin functions */
> integer f_open(), s_rsfe(), do_fio(), e_rsfe(), f_clos();
> double cos(), sin(), sqrt();
> integer s_wsfe(), e_wsfe();
> /* Subroutine */ int s_stop();
だれかフォロー解説よろしくお願いします
よくわからないですけど,ソースファイルの拡張子をCPPにしていませんか?
拡張子をCにしてCソースとしてコンパイルしないと
/* Builtin functions */
integer f_open(), s_rsfe(), do_fio(), e_rsfe(), f_clos();
double cos(), sin(), sqrt();
integer s_wsfe(), e_wsfe();
/* Subroutine */ int s_stop();
これが意味ないです。
この宣言はCなら、関数呼び出しの引数のチェックを省略するという意味です。(CPPでは、引数
なしの関数宣言)
エラーメッセージを見ると、コンパイラは律儀に型チェックしてるみたいですが。
それから、f2cで変換したソースをWindowsでコンパイルするには
NO_LONG_LONG
MSDOS
Allow_TYQUAD
といった、マクロを定義する必要があるらしい?
とりあえず、f2cのドキュメントを読んでみるのがいいかと。