Unixとwindows98を使用しています。
#include<stdio.h>
#include<math.h>  
 (以下 省略) 
と、c言語のプログラムをして、コンパイルを、gcc ファイル名.c  と
するのでしょうか。 cl ファイル名 -lm   とするのでしょうか。 
どうすれば良いか、教えてください。
説明が下手で申し訳ございません。
お答えを待ってます。
 

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

A 回答 (3件)

gcc の場合、標準ライブラリを使用しているかどうかで変わる。


そのほか、ライブラリを使用している場合は、自分でいちいち指定する必要あり。

gcc ****.c -o ****.out -lstdc++ など。

同コマンドは、g++を使用することによって、基本的なものに関しては解決される。

g++ ****.c -o ****.out など。
    • good
    • 0
この回答へのお礼

お答え有難うございます。

お礼日時:2001/06/12 12:52

UNIXでもWindows98でもコンパイルしたいということなのでしょうか?



UNIXなら「gcc ファイル名.c」でいいと思います。
Windows98の場合はインストールされているコンパイラによりますが、
たいがいはGUIからビルドできるのでコマンドラインは知らなくてもコン
パイルできると思います。
ちなみにMS-Cをお使いであれば、「cl ファイル名」でOKでしょう。
    • good
    • 0
この回答へのお礼

お答え頂き有難うございます。

お礼日時:2001/06/12 12:38

unixの場合



gcc ファイル名.c
で良いと思います。
    • good
    • 0
この回答へのお礼

お答えしていただき、有難うございます。
お陰で,UNIXのコンパイラを使用する場合、gcc ファイル名.c   で
コンパイルすることを知りました。
  

お礼日時:2001/06/12 12:28

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

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

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

Qコンパイル環境の違いによる、浮動少数点の違い

不動少数(float)を使った、c言語の演算プログラムを作っています。

Aマシン(CentOS5, gcc3.4)でコンパイルした、"test_a.so"と"test_a.a"について、
Aマシンで実行した結果、両者の結果は一致します。

Bマシン(Fedora5, gcc3.0)でコンパイルした、"test_b.so"と"test_b.a"について、
Bマシンで実行した結果、両者の結果は一致します。
Aマシンで実行した結果、両者の結果が異なります。

結果の比較をすると、以下のようになります。
"test_a.so"=="test_a.a"!="test_b.so"!="test_b.a"

(1)コンパイル環境と実行環境が違うと、浮動少数の演算に違いがでることがありますか?
(2)コンパイル環境と実行環境が違うと、so と aに違いがでることがありますか?

上記2点について、ご存知の方いらっしゃいましたら教えてください。
お願い致します。

Aベストアンサー

ちなみに、
"test_a.so"と"test_a.a"をBマシンで実行した結果はどうなりますか?

理屈だけで言えば、
・コンパイルラによるの構文解析及び変換処理の違い
・実行ファイルが使用する浮動小数点ライブラリの違い
で結果が変わる可能性はあります。

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));
}

Qビルドとコンパイルの違い

ビルドとコンパイルの違いがわかりません。
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。よろしくお願いいたします。

Aベストアンサー

ビルド=コンパイル+リンク
コンパイル=ソースコードを解析し、オブジェクトファイルを作成すること。
リンク=上記のオブジェクトファイルにライブラリを結合し、実行可能ファイルを作成すること。

Q#include

#include <stdio.h>の <> の意味と
#include "xxxxx.h"の "" の意味を教えてください。

Aベストアンサー

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにしてヘッダを識別するかは, 処理系定義とする。
 次の形式
    # include "q文字列" 改行
は, 二つの"区切り文字の間で指定した文字列で一意に決まるソースファイルの内容全体で, この指令を置き換える。指定したソースファイルの探索順序は処理系定義とする。この探索をサポートしていない場合, 又は探索が失敗した場合, 同じ文字列(もしあれば>文字を含めて)を含む次の知れに読み替えたのと同じ規則で再処理する。
    # include <h文字列> 改行
---- 引用ここまで ----

要するに、<xxx>の場合は処理系定義のヘッダ(ファイルとは限らない)を取り込み、"xxx"の場合はソースファイルを取り込むということです。いずれも探索場所やその順序は処理系定義です。

よくある誤解は、
・ヘッダは必ずファイルである。
・"xxx"ではカレントディレクトリや取り込もうとしたファイルと同じディレクトリから探索を始める。
といったものです。このように実装されている処理系が多いことは確かですが、標準規格ではそのような規定はありません。
使用している処理系がどのような実装になっているかは、マニュアルに記載があるかと思います。

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにして...続きを読む

Qコンパイル言語とインタープリター言語の違いについて

コンパイルするプログラミング言語とインタープリターする
プログラミング言語の違いについて教えてください。
特に、開発上および運営上の利点・欠点についてお願いします。

また、CGIでは、PHPやPERLなどのインタープリター言語が
主流ですが、その理由とC言語などで組むのと比較して、
どのような利点があるのか教えてください。

Aベストアンサー

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。
Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。

また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。

従って、
・純粋なコンパイル言語・・・CPU/OS等環境依存のマシン語ファイルをつくり実行する
・その他のいわゆるコンパイル言語・・・あらかじめ中間コードファイルにコンパイルしておき、その中間コードをインタープリトして実行する
・いわゆるインタープリター言語・・・実行の最初に中間コードにコンパイルしそれをインタープリトして実行する

運営上の問題
・いわゆるコンパイル言語・・・ソースファイルとオブジェクトファイルの関連づけをきちんと管理する必要がある。管理しないとエラー発生時にどのソースファイルを調べればいいかわからない
・純粋なコンパイル言語・・・上記に加えて、異なる環境で動かすためには再コンパイルとテストが必要
・いわゆるインタープリタ言語・・・何度も何度も実行される場合、コンパイルの時間が実行速度に影響する(ウェブアプリでの利用では一度できた中間コードをHTTPサーバープログラム中に保持することでコンパイルの繰り返しを防ぐ工夫がされることが多い)

特定のOS環境でのみ使える機能をつかったプログラムは、どの形式であろうが、その特定の環境でしか使えません。

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。
Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。

また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。

従って、
・純粋なコ...続きを読む

Q   #include

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
}
return 0;
}

というプログラムがあるのですが、それを改良して int型(符号付32ビット整数)および、unsigned int型(符号なし32ビット整数)のそれぞれの最大の素数を求めよという問題があり、ただし、エラトステネスのふるいは使わずに、上のプログラムを改良してみよという問題がどっかにあったんですが、全然わからないので、教えてください。

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
...続きを読む

Aベストアンサー

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が、求める値、となります。

元はnをキーボードから入力しています。
これをキーボード入力ではなく、プログラム中で「intの最大値 から順番に」するには、どうしたらいいと思いますか?

元の判定部は
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
です。これは n に対して「素数/素数でない」と表示されます。
改造するときに
・「素数でない」という表示は必要でしょうか?
・「素数」という表示ではnはわかりません。 nも表示するにはどうしたらいいと思いますか?
・素数が見つかったら、ループを抜けないと、int型の全ての素数を表示するプログラムになってしまいます。ループを抜けるにはどうしたらよいでしょうか?

以上の考えかたで、改造できると思いますが、いかがでしょうか。

unsigned int版へは次の2点を変更します。
・計算に使う変数はunsigned intにする必要がある。
・nはunsigned intの最大値から順番に

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が...続きを読む

Q激しくカテ違いかもしれませんが、コンパイル後exeがウィルス感染?

お疲れ様です。
激しくカテゴリ違いかもしれませんが、よろしくお願い致します。

環境
OS:windows vista
開発環境:visual c++ 2008 express edition
セキュリティ:SOURCE NEXT(ウィルスセキュリティーZERO)

上記でwinsock系の関数を使ったプログラムをコンパイル(Release版)しexeを作成すると「Trojan」ウィルスとして検知されてしまいます。
※同じプログラムをDebug版でコンパイルした時には起きません。

本当に「Trojan」ウィルスに感染しているものなのか?
それとも誤検知なのか?
なにかしら情報をお持ちの方、申し訳ありませんが情報がありましたら提供の程お願い申しあげます。

Aベストアンサー

自作プログラムという事であれば誤検知ということで良いと思います
ZEROではありませんが昔同様な事例を経験したことはあります

ただ一応他のスキャンプログラムでも確認した方が良いでしょう
(ZEROは余り評判よくないので乗り換えた方が良いかも)

Q#include

#include <stdio.h>

struct st
{
char a[3];
short b;
char c[7];
long d;
char e[5];
};

int main(void)
{
printf("%d\n",sizeof(struct st));
return 0;
}

コンパイルオプションでアライメントを変化させながら(1,2,4,…)
sizeof(struct st)の変化を見たいのですが、コンパイルする時に
どのようにすれば良いのでしょうか?当方、gccを使用しております。

あと、ついでなんですが、警告オプションは-Wと-Wallしかないのでしょうか?

Aベストアンサー

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
というあたりも関係あるかも

>警告オプションは-Wと-Wallしかないのでしょうか
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Warning-Options.html#Warning-Options

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
とい...続きを読む

Qgcc バージョン違いによるコンパイルエラー

C言語でWeb系のプログラムを作成している者です。
以前まで、OSはFreeBSD 4.11-RELEASE-p12・gccのバージョンは2.95.4でコンパイルできていたプログラムが、OSはFreeBSD 5.4-RELEASE-p8・gccのバージョンは・gccのバージョンは 3.4.2で、今まで出なかったようなエラーが沢山出現し、コンパイルできなくなってしまいました。

OSをインストールし直すのは、既に稼働中のサイトですので厳しく、GCCのバージョンを下げるかソースを書き換えるかして対処する方向で行きたいと考えております。
しかし、gccの2.95.4の圧縮ファイルはもう、gccの公式サイトに落ちておらず、バージョンダウンは難しそうです。

gccのバージョンによるコンパイルエラーを乗り越えた方、ご指摘など有りましたらお教えくださると幸いです。

Aベストアンサー

> ソースコードの添付は、会社のものですのでちょっと厳しいので、部分的に…

全文は必要ないのです。エラーが発生した部分を、エラーが再現可能な形で提示してもらえれば、おそらく問題点を指摘できます。

> int a = 0;
> char b[2] = "";
> char *c[256] = {0};
> こういった、宣言の指定部分で特にエラーが出ているようですので、こちらの表記が問題なのでしょうか。

上記の表記自体は問題ありません。ただ、同じ変数に対する初期化が複数回行われていると、

error: redefinition of parameter '○○'
error: previous definition of '○○' was here

ということになります。
具体的には、

int a = 1;
/* 別の宣言並び */
int a = 1;

のように、同じ変数を二回初期化した場合です。

Q#include

#include<stdio.h>
main ()
{
int a,b;
printf("適当な数字\n");
scanf("%d %d",&a,&b);
printf("(a*b)%(a+b)=%d\n",(a*b)/(a+b));
return (0);
}
で結果が
任意の数字
2
3
(a*b)(a+b)=1

なんですが違いますよね?
商の余りを求めるにはどう改変すればいいでしょうか?

Aベストアンサー

printf("(a*b)%(a+b)=%d\n",(a*b)/(a+b));
 ↓
printf("(a*b)%%(a+b)=%d\n",(a*b)%(a+b));


因みに、カテゴリが違います…。


人気Q&Aランキング