はじめまして。
よろしくお願いします。

コンパイラー:LSI C-86 Ver.3.30 試食版
OS:Windows Me

includeフォルダの中にあるヘッダ以外に
新しいヘッダnew.hを
\lsic330c\INCLUDEフォルダの中にいれて

1.cというファイルで
#include<new.h>
としてみたのですが、
コンパイル時にlcc 1.cとしてみても
1.c 1: ファイル new.hがオープンできない(No such file or directory)
というエラーがでてしまいます。

よろしくお願いします。

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

A 回答 (3件)

回答自体は#1の方がずばり書かれているので、


質問からはちょっと離れて補足を…

自分で作ったオリジナルのヘッダは、
よっぽど汎用性があるものでない限り、
ソースと同じディレクトリに入れてしまった方がいいですよ。
でないと、あとでゴチャゴチャしちゃうので。

#include <new.h>
はコンパイラに指定されているディレクトリをまず調べ、
#include "new.h"
ならカレントディレクトリをまず調べます。

きっちり使い分けると、後で見やすいですよ。
    • good
    • 0
この回答へのお礼

quenistaさん、fatal_errorさん、
迅速なご解答ありがとうございました。

#include"new.h"
とする事でカレントからrequireできました。

あと1点、気になる点なんですが、
>path設定に、インクルードとライブラリのパスを追記するか、
というのは、C:\autoexec.batにインクルードのパスを追記する事なのでしょうか?

お礼日時:2001/12/01 03:09

>autoexec.batにインクルードのパスを追記する事なのでしょうか?


一応、念の為...。
パスの追記と言っても、「path=」に追記する訳では有りません。
set INCLUDE=<インクルードパス>
set LIB=<ライブラリパス>
の追記を行います。

又、他のコンパイラと重複して使ってる場合には、「autoexec.bat」に足さずに、別のバッチファイルを作って、LSI C用のDOSプロンプトショートカットを作成して起動指定に追記する方法か、
LSI Cのコンパイル指定ファイルに記述する方が良いと思います。
    • good
    • 0

インクルードのパスが通ってないのですね。



path設定に、インクルードとライブラリのパスを追記するか、
コンパイル時のオプションに、
-I<インクルードパス> -L<ライブラリパス>
を追記して見て下さい。
    • good
    • 0

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

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

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

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

Qc:\Winodows\Sendotoとc:\Windows\デスクトップについて

設定によってはシステムをc:\Winodowsからc:\winにできるから
c:\Winodows\Sendotoとc:\Windows\デスクトップを
c:\win\Sendotoとc:\win\デスクトップにできます

同じように"Sendoto"と"デスクトップ"を例えば"Send"と"desktop"のように他の名前にできるのでしょうか?
できたとするとどのように命名されているかはどこを見れば良いのでしょうか?

Sendotoのファイル等はデスクトップ上の右クリックメニューの送るに表示され
デスクトップのファイル等は起動後に真っ先に現れる画面に表示されますね

よろしくお願いします

Aベストアンサー

SHGetSpecialFolderLocationを使ってください。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=235894

Q#include というヘッダファイルについて

お早う御座います。
Cの初心者です、宜しくお願いします。
「#include <Windows.h>」というヘッダファイルはどのようなプログラムを書いたときにincludeしてやる必要があるのでしょうか。
宜しくお願いします。

Aベストアンサー

VisualStudioなら、<Windows.h>の部分を右クリックして
「定義ファイルに移動」のような項目で中身を見れたと思います。
そこに定義されている関数や定数を使う場合にincludeしてあげる必要があります。
※Windows.hの中身は弄らないでください

Qヘッダのinclude順

ヘッダにヘッダをincludeせず
include順でカバーする場合と、
必要なヘッダはヘッダにincludeする
という方法があると思いますが
この違いはなんでしょうか?

上記の方法でも結局ヘッダの変更で影響のあるcppファイルは
コンパイルする必要があるのでどちらも同じ気がするのですが
何か違い、あるいは推奨する理由はありますか?

Aベストアンサー

どちらの方法でも同じですね。でも利点で考えれば下のようになると思います。
前者はソースファイル上にincludeしているヘッダファイルの一覧が見えて
どのヘッダファイルを参照しているか一目瞭然になります。
後者はヘッダファイルのパッケージ化(カプセル化?)を行うことになるので、
ある関数を使うときはこれさえあればいいといった感じになります。
どちらを選択するかは作り手の好みの問題じゃないでしょうか。

私なら…
ソース上にincludeがたくさん並んでも煩雑になるような気がするので
後者が好きかなあ。

Q.NET C++で、構造体の配列をnewで作成しようとするとerror C2440のエラーとなってしまいます

Visual studio2003 .NET C++で、構造体の配列を作成し、
改めて構造体の配列をサイズ指定して作成しようとすると、error C2440が出てしまいます。
ポインターで宣言したつもりはないのですが、ポインターから配列に変換できないといった項目のエラーなので、
なぜこのようなエラーが出るのかわからずにおります。


typedef __nogc struct TEST
{
// 省略
};

TEST struct_test __nogc[];
int int_num = 10;

struct_test = new TEST __nogc[int_num];
// error C2440: '=' : 'TEST *' から 'TEST []' に変換できません。

ご指摘等ありましたらご回答いただけますと助かります。
よろしくお願いいたします。

Aベストアンサー

new文の実体は「ヒープメモリからメモリを確保し、その先頭アドレス、つまり、ポインタを返す」なのだから、受け手はポインタじゃないとならない。

要は「やってる事はmallocと一緒」な訳。

mallocと違うのは「関数から抜ける際に、自動的にdeleteされる」ってだけ。

>ポインターで宣言したつもりはないのですが、ポインターから配列に変換できないといった項目のエラーなので、
>なぜこのようなエラーが出るのかわからずにおります。

「質問者さんが配列で宣言しちゃったから」に他なりません。

質問者さんは、以下のような記述がOKだと考えますか?

int main(void)
{
char buf[];
buf = new char[1000];
buf[0] = 'a';
buf[999] = '\0';
}

では、これは?

int main(void)
{
char buf[];
char *p;
p = new char[1000];
buf = p;
buf[0] = 'a';
buf[999] = '\0';
}

では、これは?

int main(void)
{
char *buf;
buf = new char[1000];
buf[0] = 'a';
buf[999] = '\0';
}

じゃあ、最後。これは?

#include <略>
int main(void)
{
char *buf;
buf = malloc(sizeof(char) * 1000);
buf[0] = 'a';
buf[999] = '\0';
free(buf);
}

Cの基本の「動的に確保した配列変数の実体は、単なるポインタである」っての忘れてませんか?

new文の実体は「ヒープメモリからメモリを確保し、その先頭アドレス、つまり、ポインタを返す」なのだから、受け手はポインタじゃないとならない。

要は「やってる事はmallocと一緒」な訳。

mallocと違うのは「関数から抜ける際に、自動的にdeleteされる」ってだけ。

>ポインターで宣言したつもりはないのですが、ポインターから配列に変換できないといった項目のエラーなので、
>なぜこのようなエラーが出るのかわからずにおります。

「質問者さんが配列で宣言しちゃったから」に他なりません。
...続きを読む


人気Q&Aランキング

おすすめ情報