• ベストアンサー

コンパイルとOS

コンパイラのインストールファイルの中のiostream.hの ようなヘッダファイルには、OSのバージョンによって例えば #if (WINVER < 0x0500) のような切り分けがされています。 Win98でコンパイルすればWin98用の実行ファイルが作られ、 WinXPでコンパイルすればWinXP用の実行ファイルが作られるわけで、その切り分けはコンパイル時に使われるもので 実行ファイルにその切り分けルーチンが含まれ、実行ファイルが実行された時に動的にOS別の切り替えがされるわけではないんですよね?

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

>実行ファイルが実行された時に動的にOS別の切り替えがされるわけではないんですよね? そうです。あくまで#ifはプリプロセッサでコンパイル時に 条件判定しているだけで、実行ファイルとはなんの関係もありません。 普通windowsの場合xpでコンパイルしても 98で動作します。勿論xp専用のAPIとかは 使えませんしUNICODE系の関数とかは避けたほうが 良いです。 ところで何のコンパイラを使っているんでしょう? VC++2003のiostreamもBCC5.5.1のiostream.h をみましたがWINVARの定義をみているところはありませんでしたが。 動的に切り替えたいなら if ( ) です。

muenos
質問者

お礼

iostream.hは例で、どのファイルだったか忘れましたが ふと昔の疑問を思い出したので質問しました。 ありがとうびざいました。

関連するQ&A

  • BCC32のコンパイルでDOSアプリ

    bcc32 test これでコンパイルしてできた実行ファイルはWin32でした。 クイックビューアで見た時にDOS EXECUTABLEと表示される ようにコンパイルするにはどうしたらいいんですか? 下記がtest.cppのソースです。 #include <iostream.h> int main(){ printf("hello"); return 0; }

  • VisualStudio2008 で iostream.h が見つからないコンパイルエラーは?

    VisualStudio2008 でVisual C++コンソールアプリのプロジェクトを開きましたが、ヘッダーファイル たとえばiostream.hが見つからないというコンパイルエラーはどこの設定を変更すればよろしいのでしょうか。

  • コンパイルできない・・。(VC++初心者です)

    VC++初心者です。 MS VC++6.0を使用しています。 プロジェクト(Win32 console application)を新規作成して,以下のソースファイル2つとヘッダファイル1つを作成して,コンパイルしたところ インクルード ファイルがオープンできません。'kneko.h': No such file or directoryとエラーが表示されます. 3つのファイルがリンクできてないのでしょうか? また,ヘッダファイルを選択,表示させてコンパイルしようとすると kneko.h の拡張子に関連したコンパイラツールがないためにコンパイルできないと警告されます。 どこが間違っているのでしょうか?よろしくおねがいします。 test.cpp ------------------------------------------------- #include <iostream> #include <cstdio> #include "kneko.h" using namespace std; int main(){ kneko x( "tama" ); x.naku(); } ------------------------------------------------- kneko.h ------------------------------------------------- #ifndef __kneko_h #define __kneko_h #include <iostream> #include <string> using namespace std; class kneko { string name; public: kneko(){}; kneko( string n ); void setname( string n ); void naku() const; }; #endif ------------------------------------------------- kneko.cpp ------------------------------------------------- #include "kneko.h" kneko::kneko( string n ){ name = n; } void kneko::setname( string n ){ name = n; } void kneko::naku() const { cout << "My name is " << name << "." << endl; } -------------------------------------------------

  • bcc コンパイルしたファイルが実行できない。

    sea_clear_skyです。 環境 BCC55コンパイラ OS XP SP3 hello worldと表示させるプログラムは、コンパイルして、コンソールで表示させることはできるのですが、MYSQLに接続して、 データを表示させるプログラムは、コンパイルして、リンクして、 EXEファイルを作れるのですが、そのできたEXEファイルを実行しようとすると、問題が発生したため、ファイル名.EXEファイルを 終了しますと表示され、コンソール画面に何も表示されません。 以前は、mysqlに接続させて、コンソールに表示させることは できました。BCCコンパイラを標準コンパイラにしたりできるのでしょうか? VC++ C#.NETも使用しています。 この二つのコンパイラとBCCは共存できないのでしょうか? よろしくお願いします。

  • コンパイルできない

    タイトルにも記載したとおりコンパイルが出来ない状態です。 ある参考書に付属されていたCD-ROMでコンパイラをインストールし、参考書通りに行っているのですが、最後にコマンドプロンプトにてコンパイラしようとすると 「C:\WINDOWS\SYSTEM32\AUTOEXEC.NT.システムファイルはMS-DOSおよびMicrosoft Windowsアプリケーションを実行するのに適していません」 と表示されてしまいます。 このようなことにならずに、コンパイルできるようにするにはどうすればいいのか、分かる方がいらっしゃったら教えていただけないでしょうか? プログラミングは初心者なので上記の説明では不足しているところもあると思いますが、その際にはもちろん適宜状態を補足するつもりです。 どうか御協力ください。

  • コンパイルの実行の仕方

    初めてプログラミング言語を授業でとったのですが、 コンパイルの【実行】の仕方がわかりません。 まず、コマンドプロンプトを開くまではわかったのですが、 学校での説明に 「javaのコンパイラはjavacであるので、以下のように指定する。 javac <ソースファイル名> 」 と書いてありました。 コンパイラというのは上記の場合、コマンドプロンプトに 「C:\>javac *****.java」を入力すればコンパイルしたということになるのでしょうか? 「指定する」とかいてあっても指定の仕方すらわからないのです。 コンパイルを検索してもなかなかコンパイルをする意味がよくわからないので、よろしければ教えてください。

  • C++での <iostream.h>と<iostream>とusingnamespaceの関係等を教えてください。

    どうでもいい質問なのですが… C++で色々とソースを打っていると気づいたのです。 #include <iostream.h>とするとusing namespace std;の一文を書かなくてもコンパイルエラーになりません。 また、逆に#include <iostream>とするとusing namespace std;の一文が必要になります。 だから、h(ヘッダファイル)の.hは必要なのかな?と思い、#include <cstdlib.h>とするとコンパイルエラーになります。 なにか理屈がわかりません。コンパイラはVC++6.0です。よろしくご回答の方お願いいたします。

  • コンパイルエラー

    本日からC++を勉強しはじめました。 使用しているコンパイラはBORLAND C++ COMPILER 5.5 です。 #include<iostream> int main(){ cout<<"hello"; return 0; } 上記をコンパイルすると下記のエラーが出ます。 いったいどこがいけないのでしょうか。 どなたか教えてくださいませ。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 123.c: 致命的エラー F1003 C:\BORLAND\BCC55\include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H *** 1 errors in Compile *** *** コンパイル終了 ***

  • CとC++、どちらでコンパイルされているかをソース中で判別する方法

    タイトルのとおり、CとC++のどちらでコンパイルされているのかを、ソース中で判別する方法(#ifなど)を教えて下さい。 目的は、extern "C" という記述がCではエラーになってしまうのですが、CでもC++でもインクルード可能なヘッダファイルにするため、ヘッダファイル中で   #if「C++でコンパイル中」     extern "C" {   #endif としたいのです。 よろしくお願い致します。

  • コンパイルの仕方お教えください

    初心者で申し訳ございません。 コンパイルの時、自作のヘッダファイルはワークスペース内に 置かなければならないのでしょうか? お教え下さい。