C++のデフォルトinclude文

このQ&Aのポイント
  • C++のデフォルトinclude文に関する疑問
  • 研究室のマシンと教授のマシンで異なるコンパイル結果
  • 解決策としてstdlib.hのinclude文を追加
回答を見る
  • ベストアンサー

C++のデフォルトinclude文?

こんにちわ。大学でC++を勉強している者です。授業のプロジェクトで自分の作ったC++のプログラムを大学のLinuxサーバでコンパイルしたところ問題なくコンパイルが通り、動作確認も出来たのですが、それを教授に提出したところ、コンパイルが出来ませんと言われました。どうやら教授は若干大学の研究室のコンピュータと違う環境でコンパイルした模様です。教授の部屋に行ってエラーを見たところ、exit, srand, rand等の関数が見つかりませんと言われていました。どれもstdlib.hに属する関数だと思い、#include <stdlib.h>を入れて再提出したところ問題が解決した。が、どうして研究室のマシンではエラーが起きなかったのかが未だにわかりません。g++のコンフィグにデフォルトのinclude文を定義するところがあってそれが違ってたのではないかとか思っているのですが、確かな情報が未だにつかめていません。教授に聞いたのですが、彼はネットワークが専門でC++の専門ではないので「わかりません」とあっさり言われてしまいました。。。環境についてですが、わかっているのは研究室のマシンがCentOS release 5.5だということだけ。教授のマシンは不明です。宜しくお願いします。

  • selfy
  • お礼率87% (41/47)

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

それらは、GCCのビルトイン関数と呼ばれるものです。 GCCに組込まれているもので、特定のヘッダをincludeしているわけではありません。 無効にする方法、その他、詳しくは http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Dialect-Options.html#index-fno_002dbuiltin-107 http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Other-Builtins.html#Other-Builtins あたりを。何がビルトインになっているかは、バージョンによって違いがあります。 > どれもstdlib.hに属する関数だと思い まともな解説書、マニュアルなら、特定の標準関数を使いたいときに、#includeにどのファイルを指定すればいいか明記されているはずです。

selfy
質問者

お礼

なるほど!!!ビルドイン関数ですね!!!すごく解決した気がします。というのも、研究室にはCentOS 5.5とCentOS 6.3があって、CentOS 6.3のマシンではこのエラーが起きることがわかったのです。恐らくCentOSがバージョンアップした段階でg++のビルトイン関数もアップデートされたのでしょうか。教授にも教えてときます。どうも有難う御座いました。

関連するQ&A

  • C++のインクルードファイル

    私自身はCについてはビギナーの域を出ないのですが、ある専門家が作ってダウンロードして使用するソースプログラムがありました。 解凍してボーランド(現Embarcadero?)BCC32でコンパイルしたところ、”インクルードファイルがない”とのことでした。プログラムの冒頭部のincludeは以下のようになっています。 #include <math.h> #include <stdio.h> #include <process.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include "../Allocation.h" #include "../Allocation.h" #include "../Headers.h" コンパイラが提供しているようなものと、自前で用意するものがあるのかなと思いますが。 特に../ が付いているものはソースよりも1つ上のフォルダを指定しているように思います。 ダウンロードして解凍しただけなのでそれ以外の手の施しようがないのですが、どのように考えるべきでしょうか。提供した人に聞くのが一番だと思いますが。これだけで動く、ということになっています。よろしくお願いします。

  • stdlib.hをincludeするには?

    stdlib.hをインクルードしたいのですが、見つかりませんとコンパイルエラーがでます。 stdlib.hそのものは、任意のフォルダにあるのですが、設定等が悪いのでしょうか? よろしくお願いします。 環境:VC++6.0 WIN98

  • cygwin gcc c99 での isnormal と strtold の使用

    Cygwinのgccで-std=c99オプションを付けて 以下のコードをコンパイルしようとしています。 #include <stdlib.h> #include <math.h> int main() { isnormal(0.123); strtold("0.123", NULL); return 0 ; } $> gcc -std=c99 test_strtold.c ですが、コンパイルできず、2つの関数とも'undefined reference'になります。 -std=c99を付けてコンパイルする方法または この記述と同等の別の記述がありましたらご教授願います。 よろしくお願いいたします。

  • C言語の電卓におけるincludeについて

    C言語の電卓におけるincludeについて C言語の電卓におけるincludeについて質問です。 プログラミング言語C第2版 ANSI規格準拠 B.W.カーニハン・D.M.リッチー著 質問1. 4章にある電卓プログラムですが、getch.cがcalc.hをincludeしないのはなぜですか? 解説よろしくお願いします calc.h #difine NUMBER '0' main.c #include <stdio.h> #include <stdlib.h> #include "calc.h" #difine MAXOP 100 getop.c #include <stdio.h> #include <ctype.h> #include "calc.h" stack.c #include <stdio.h> #include "calc.h" #difine MAXVAL 100 getch.c #include <stdio.h> 質問2. 第4章までしか読んでいませんが、「関数で返さない値はゴミ(garbage)になる」と書いていました。 関数で返さない値は、関数から抜けると消えるものと思っていたので驚きました。 関数で返さない値の後処理はどうすればいいのですか? 質問3. 外部変数と静的変数の違いは? ―メモ― 局所変数 自動変数     main内の変数     int x;                          static int x; 永久的なメモリが与えられることを意味する 外部変数          main外の変数     static int x; 静的変数          関数内の変数     static int x; レジスタ変数        変数をレジスタに置く register int x; 以上、有識者の方、教えてくださいmm

  • このプログラムを見てください(C言語) m( _ _ )m

    現在乱数を使ったプログラムを作っています。 下のプログラムでコンパイルではエラーがでませんが、実行するとデバッグエラーが出てきます。コンパイラにはbccを使っています。恐らく原因は別の関数でbに値を代入してそれをaに代入しているからだろうと思いますが、なぜこれがいけないのかが分かりません。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> int ran, a=1, b, c; void test(void){ b=8; } void main(){ srand(time(NULL)); a=b;//ここを無くすとなぜかエラーが出ない。 while(1){ ran=rand()%(a*2)+1; switch(ran){ case 1: c=1; break; case 2: c=1; break; case 3: c=1; break; case 4: c=2; break; case 5: c=2; break; case 6: c=3; break; case 7: c=3; break; case 8: c=4; break; } printf("%d",c);printf("何か押してください\n");getch(); } }

  • #includeとexternとCコンパイラ

    表題についてお伺いします。 (1)Cファイル内の関数をexternで渡す (2)#includeでCファイルごと定義してその関数を使う では、コンパイルは異なるでしょうか? 具体的には、 (1)はCファイルをCコンパイルする (2)はCファイルをC++コンパイルする になりますか? 前提条件:VS2013proのVC++でMFCアプリで作成するプロジェクト

  • [c++] <pthread.h>がinclude できない

    Visual C++ 2008 Express Edition Windows XP Professional SP3 以下のコードがコンパイルできない ーーー #include <pthread.h> ーーー エラー内容 include ファイルを開けません。'pthread.h': No such file or directory LIBをインストールしたりする必要がありますか?

  • C言語 動的なメモリの確保 実行できない

    malloc関数を使いメモリを確保しそこへ"ABCD"と記憶させ、ポインタ*Cを使い確保したメモリの内容を表示するプログラムです。 ********************************************* #include <stdio.h> #include <stdlib.h> int main(void) {   int i;   char *C;   C = (char *) malloc (sizeof(char) * 5);   C = "ABCD";   for(i = 0; i < 5; i++){     if(C[i] != NULL){       printf("%s", C[i]);    ←※エラー※     }   }   free(C);   return 0; } ********************************************* 正常にコンパイルできますが実行エラーになります。VCを使いF10のデバッグテストで※のところエラーになります。なぜなのでしょうか?

  • ヘッダーファイルでは、他のヘッダーファイルをインクルードできないのか

    Javaを仕事で使っています。 最近趣味でC++を始めました。色々形式の違いに戸惑っています。 C++では関数を宣言しなければならないので、クラス名と同じヘッダーファイルにそのクラスで使う関数を宣言して、それをインクルードしています。 そこで今、壁にぶちあたりました。 あるクラス(仮にFooとします)の関数で、他のクラス型(Hogeとします)を引数に取りたいので、ヘッダーファイルにそれを宣言しようとしているのですが、コンパイルエラーになってしまいます。 Foo.hは以下のような感じ。 #include Hoge.h 中略 GetHoge(Hoge hoge); コンパイルエラーでは error C2011: 'Hoge' : 'class' 型の再定義 などと言われます。 クラスとその同名のヘッダーファイル、という形式を変えずに 他のクラス型を引数にとる関数を作るには、どうしたらよいのでしょうか? C++に関しては全くの素人です。詳しい方、ご教示願います。

  • おしえて

    C言語のソースのおかしいところ教えてください。 #include <stdio.h> #include <time.h> #include <stdlib.h> main () { int computer; srand(time(NULL)); printf("【ジャンケンゲ―ム】\n"); computer = rand()%3+1;  printf("コンピュータは"); if(computer ==1) { printf("グー"); } else if(computer == 2) { printf("チョキ"); } else {printf("パー"); } printf("! "); return 0; } エラーは エラー E2206 2-3.c 12: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 2-3.c 12: 不正な文字 ' ' (0x8140)(関数 main ) とでます。