ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

現在、「Visual studio.Net2003」を使っています。
まだはじめて日が浅くBasicの方もやっていたのですがCの開発環境を作ろうとしたのですが作れません。
過去の履歴を読んで見たのですがまだ用語などよくわからず同じような質問があれば大変申し訳ないのですが、

VisualC++プロジェクト
    ↓
win332プロジェクト
    ↓
(アプリケーションの設定)
コンソールアプリケーション
    ↓
空のプロジェクト

ときて、「新しい項目の追加」で
VisualC++

C++ファイル(cpp)
が表示されません。
ファイル名の拡張子を.cにしてやってみましたが今度は
デバッグを開始できません。

「(プロジェクトが入っているフォルダ)***.exeを開けません。
指定されたファイルが見つかりません。」

となってしまいます。
PCを変えて初めてCをやろうと思ったらこうなってしまいました。Basicの方は問題ありません。
どうすればCの開発環境はできるのでしょうか?
OSはwindows2000Pro(SP4すべてアップデート済みです)。
長文と読みにくい文、失礼しました。
よろしくお願いします。

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

A 回答 (3件)

VisualC++.net自体が開発環境でもあるため


はじめてC/C++を触る人にとっては敷居が高いのかもしれません。
VC++自体、色々な機能が提供されているので
単純なコンソールのプログラムなら簡素なBCCの方が理解しやすいかもしれません。
※BCCはフリーで入手できます。過去ログを検索すればたくさんヒットするでしょう。

ところで
「(プロジェクトが入っているフォルダ)***.exeを開けません。指定されたファイルが見つかりません。」
がまだでているのだとすると、プロジェクトの設定の作業ディレクトリ(カレントディレクトリ)
にexeファイルができていることを確かめてください。
できていないのだとすると「構成の種類」がアプリケーションになっているか調べてください。
もしデバッグのexeが出来ているなら、直に実行して起動できるかも調べてください。
あとコントロールパネル→管理ツール→サービスでDebug Managerが動いているか調べてください。

とりあえず私にアドバイスできることはこれぐらいです。

なんというかもっと色々試してください・・・
試行錯誤することは大切です。
    • good
    • 2
この回答へのお礼

何度もアドバイスをいただきありがとうございます。
アドバイスをいただいた通り、BCCをインストールして今そちらで勉強をしています。
初心者でも大変使いやすく勉強に重宝させていただいています。
又、アドバイスで教えてもらったように3つのことを確認してみました。Debug Manegerが動いておらず(、というかそれ自体が存在しない状態です)もう一度インストールをしなおしてみることにしました。

重ねがさねになりますが幾度もアドバイスをありがとうございました。
私用で返事がお礼が大変遅れてしまったこと申し訳ありませんでした。
ありがとうございました。

お礼日時:2005/04/17 14:50

設定の間違いという可能性も当然ありえますが、


「空のプロジェクト」以外で出来るコンソールアプリケーションを
そのままビルドしても問題なく実行できることを確認してくさい。

以上を確認した上で
自分の書いたC++ファイルのソースコードを貼り付けて質問すると良いと思います。

後C/C++の事はどれぐらい分かっているでしょうか?
Visual C++はあくまでC/C++がベースであり、使うなら
先にC/C++の基礎を学習しておいた方が良いです。

この回答への補足

お世話になっております。
アドバイスしていただいた様に「空のプロジェクト」でもビルドをしてみました。
結果は問題なく実行できました。
書いているソースコードは

#include<stdio.h>

int main()

{
printf("hello world\n");

return 0;
}

です。教本の一番前にあるやつをテストで書いていました。
恥ずかしながらC/C++はまだなにもわからない本当の初心者です。
VisualStudio.netの学生用ツールを使って学生の今、それでC言語を勉強しようとおもったのですが・・・・。
VisualStudio.netは基礎の勉強にはむかないでしょうか?
また再度アドバイスをいただきありがとうございます。
それを元に調べてやってみたりしているのですがまだ知識が皆無なもので行き当たりばったりでやっております。
再度のアドバイスありがとうございました。

補足日時:2005/04/08 09:40
    • good
    • 0

ビルド時に何のエラーもでませんか?


メニューの「ビルド」→「ソリューションのビルド」

この回答への補足

アドバイスありがとうございます。
「ソリューションのビルド」をやってみました。
正常にできました。
C++ファイルも表示されました。
テストでその作成したプロジェクトを削除してまたやってみたのですが、そうするとC++ファイルが表示されません。
また「ソリューションのビルド」をして作ると表示されます。
右も左もわからない初心者なものでご教授をお願いしたいのですが一度ビルドをしないといけないのでしょうか?
設定などのまちがいでしょうか?
よろしくお願いします。
同じことになりますがアドバイスありがとうございました。

補足日時:2005/04/05 18:12
    • good
    • 1

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

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

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

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

Qビルド失敗 指定されたファイルが見つかりません

// cout01.cpp
#include <iostream>

int main()
{
std::cout << "Hello, World!" << std::end1;
return 0;
}

1>------ ビルド開始: プロジェクト: sample, 構成: Release Win32 ------
1>コンパイルしています...
1>sample.cpp
1>.\sample.cpp(6) : error C2039: 'end1' : 'std' のメンバではありません。
1>.\sample.cpp(6) : error C2065: 'end1' : 定義されていない識別子です。
1>ビルドログは "file://c:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\sample\Release\BuildLog.htm" に保存されました。
1>sample - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

デバックなしで開始をしたときのメッセージは
プログラム C:\Documents and Settings\Owner\My Documents\visual Studio 20008\Projects\sample\Rekease\sample.exe を開始できません。
指定されたファイルが見つかりません

ソースはこれだけなのですが、ビルドを何回やっても失敗します。
デバックなしで開始を押しても指定されたファイルが見つかりませんって出てしまい
まったくのプログラミング初心者で本を買って家でやってまして、最初はコマンドプロンプトが出て
Hello, World!で成功したのですが、その後なにをいじってしまったのかできなくなりました・・・

どなたか助けていただけないでしょうか?
お返事お待ちしております。

// cout01.cpp
#include <iostream>

int main()
{
std::cout << "Hello, World!" << std::end1;
return 0;
}

1>------ ビルド開始: プロジェクト: sample, 構成: Release Win32 ------
1>コンパイルしています...
1>sample.cpp
1>.\sample.cpp(6) : error C2039: 'end1' : 'std' のメンバではありません。
1>.\sample.cpp(6) : error C2065: 'end1' : 定義されていない識別子です。
1>ビルドログは "file://c:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\sample\Release\BuildLog....続きを読む

Aベストアンサー

追記です。

>プログラム C:\Documents and Settings\Owner\My Documents\visual Studio 20008\Projects\sample\Rekease\sample.exe を開始できません。

これ、メッセージを見ながら、ここにキーボードで写してませんか? Rekease っていうのがそのままでは、たぶんなにかがおかしいです。
先に書いたように、見間違い、打ち間違いはよくあります。今回のもの容易に予想がつくのでいいですが、別のケースでは正確で無いと回答できないでしょう。

質問の際は、できるかぎりコピーアンドペーストで、表示されるままを記入するようにしましょう。


> 指定されたファイルが見つかりません

このエラーは、「ビルドに失敗しているから、実行ファイルが存在しない」という極単純な理由です。


> ビルドを何回やっても失敗します。

エラーが出ているものを、なんの修正もなくビルドすれば、失敗して当然です。

ビルド時にエラーになるのは、見付けるのも直すのも、非常に簡単な間違いだと思ってください。これを直せるようになることが、まずは上達の一歩です。

この先続けていけば、「ビルドは成功するのに、実行すると動作がおかしい」という状況に出会うと思います。そんなのは直すのは非常に困難です。

追記です。

>プログラム C:\Documents and Settings\Owner\My Documents\visual Studio 20008\Projects\sample\Rekease\sample.exe を開始できません。

これ、メッセージを見ながら、ここにキーボードで写してませんか? Rekease っていうのがそのままでは、たぶんなにかがおかしいです。
先に書いたように、見間違い、打ち間違いはよくあります。今回のもの容易に予想がつくのでいいですが、別のケースでは正確で無いと回答できないでしょう。

質問の際は、できるかぎりコピーアンドペーストで、表示されるまま...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qファイル出力の場所を指定

現在C++にてhtmlファイルを出力するプログラムを作っているのですが、出力場所を指定することはできるのでしょうか?(現在はそのプログラムソースが保存されている場所と同じファイル内に出力されますが、それをデスクトップに出力するなど。)
もし、方法がありましたら、教えてください。
ソースや参考HPのURLなどのせていただけたらありがたいです。
環境はVisualStudio.NET2003です。
よろしくお願いします。

Aベストアンサー

単にファイル名の前にパスを指定する。

絶対パス指定
fp=fopen("c:/temp/test.txt","w");

相対パス指定
fp=fopen("./hoge/test.txt","w");


デスクトップはOSやユーザによって場所が異なるので、少し面倒です。
XPの場合環境変数を利用してこんな感じで出来ると思います。

例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(void)
{
FILE *fp;
char fname[1024];
strcpy(fname,getenv("USERPROFILE"));
strcat(fname,"/デスクトップ/test.txt");
fp=fopen(fname,"w");
//処理
fclose(fp);
}

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。

QC++とVC++の違いについて

この質問をご覧頂きありがとうございます。

みなさんに2つ、お聞きしたいことがあり、質問させていただきます。
1.C++とVC++とでは、どのくらいの違い(どういう違い、特徴)があるのでしょうか?

2.また、これからC++/VC++でプログラミングを始めようとした場合、
C++からVC++へと段階を踏んで勉強した方がよいのでしょうか?

一応、私のプログラミングの履歴としては、
言語としてVisual Basicは多少勉強はしておりました。
また、オブジェクト指向の基礎程度(多相、継承、カプセル化)は理解しています。

抽象的な質問で大変恐縮なのですが、
みなさんの経験論や、ご参考にした本、HP等がありましたら、
ご教授いただければと思います。

Aベストアンサー

こんにちは、honiyonです。
 VC++ は、Microsoftの発売している C++開発環境です。 純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。

 VC++に限らず、大体はそうです。 ProC++も、Borland C++も皆そうです。
 今までお使いになっていた VBも、BASICコンパイラ+開発環境です。 
 こちらの場合、BASICに機能を追加・・・というより仕様そのものを大幅いじってますね(笑)

 VC++をただ単純に C++として使用するなら良いですが、VC++とMFCを使用してウインドウアプリケーションを作りたいという事であれば、死に物狂いな勉強が必要が必要かもしれません。Windowアプリケーションの処理プロセスを理解していないと、とっても難解に感じると思います。
 VC++でなければいや!という理由がなく、Visual Basicからスムーズに移行でき、かつVisual Basicより奥の深い事をしたい、というならば C++ Builder をお勧めします。 こちらで腕を慣らし、徐々にWindowアプリケーションの処理プロセス(WinMainから始まるプログラムの組み方の事です)を学ぶと良いかな、と思います。 その上で VC++&MFCな環境に移行すると、敷居はぐっと低くなります。
 私は一度VC++&MFCに挫折しましたが、こちらの方法で何とか理解する事が出来ました(^^;

 参考になれば幸いです(..
 

こんにちは、honiyonです。
 VC++ は、Microsoftの発売している C++開発環境です。 純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。

 VC++に限らず、大体はそうです。 ProC++も、Borland C++も皆そうです。
 今までお使いになっていた VBも、BASICコンパイラ+開発環境です。 
 こちらの場合、BASICに機能を追加・・・というより仕様そのものを大幅いじってますね(笑)

 VC++をただ単純に C++として使用するなら良いで...続きを読む

Qハンドルされていない例外が発生しました

C言語の勉強をしていますが、初心者なものでなかなか思うようにできません。
Visual Studioを使って「lfit5」というプログラムを作っています。下にプログラムのmainを載せています。

int _tmain(int argc, _TCHAR* argv[])
{
int ma=2;
int mfit=2;
int ndata=4;
float m;
float s=0.0;
float *n;
float **covar;
float *chisq=&s;
void (*funcs)(float x[], float *afunc, int ma);
float x[4]={1,2,3,4};
float y[4]={0,5,15,24};
float sig[4]={1,1,1,1};
float a[2];
int ia[2];
char buf;
//chisq=0;

n=&m;
covar=&n;

funcs=orgfuncs;

lfit(x, y, sig, ndata, a, ia, ma, covar, chisq, funcs);

buf=getchar();
buf=getchar();

return 0;
}

ビルドはできたのですが、実行すると

lfit5.exe の 0x004127f4 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xccccccd0 に書き込み中にアクセス違反が発生しました。

というエラーメッセージが出ます。

最初は「coverが初期化されていない」というエラーが出ていて、
n=&m;
covar=&n;
等 を加えることで初期化のエラーは消えたのですが、次に上記のようなエラーメッセージが出始めました。

専門用語等解らないことも多いのですが、どうすればよういか解らず、御教授頂きたいです。
どうか宜しくお願い致します。

C言語の勉強をしていますが、初心者なものでなかなか思うようにできません。
Visual Studioを使って「lfit5」というプログラムを作っています。下にプログラムのmainを載せています。

int _tmain(int argc, _TCHAR* argv[])
{
int ma=2;
int mfit=2;
int ndata=4;
float m;
float s=0.0;
float *n;
float **covar;
float *chisq=&s;
void (*funcs)(float x[], float *afunc, int ma);
float x[4]={1,2,3,4};
float y[4]={0,5,15,24};
float sig[4]={1,1,1,1};
float a[2];
int ia[2];
char bu...続きを読む

Aベストアンサー

恐らくlfitの中で初期化されていないポインタを使ったと思います。
0x004127f4 は例外の発生したコードのアドレスです。
0xccccccd0 はデータとしては通常はあり得ないアドレスです。
そもそも、0xCCは機械語でINT3に相当し、ブレークポイント用の
割り込み命令です。スタックなどの未使用領域は当初はこの値で
埋められるので、初期化されない自動変数はよくこの値になります。

Q1 つ以上の複数回定義されているシンボルが見つかりました

こんにちは。

VC++を使ってプログラムを作っているのですが、コンパイルは通るのですが、リンク時に以下のエラーメッセージが出ます。どなたか解決方法を教えてください。
(仮にプロジェクト名をPROJECTとします。)

リンク中...
PROJECT.obj : error LNK2005: "struct AA pAA" (?pAA@@3UAA@@A) はすでに PROJECT.obj で定義されています
Debug/PROJECT.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
link.exe の実行エラー

開発ツール:VC++6.0 MFCを使用しています。
OS:Windows XP SP2

上記現象の発生した契機は、ヘッダファイル内で定義している構造体に構造体変数を加えたことによります。
【発生前】
・ヘッダ内
struct AA
{

};

・ソース内
AA pAA;

【発生後】
・ヘッダ内
struct AA
{

}pAA;

・ソース
(ソース内での構造体変数の宣言を削除)

以上で、どなたか心当たりのある方はご教授をお願いいたします。

こんにちは。

VC++を使ってプログラムを作っているのですが、コンパイルは通るのですが、リンク時に以下のエラーメッセージが出ます。どなたか解決方法を教えてください。
(仮にプロジェクト名をPROJECTとします。)

リンク中...
PROJECT.obj : error LNK2005: "struct AA pAA" (?pAA@@3UAA@@A) はすでに PROJECT.obj で定義されています
Debug/PROJECT.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
link.exe の実行エラー

開発ツール:VC++6.0 MFCを使用して...続きを読む

Aベストアンサー

struct AAを定義したヘッダファイルを複数個所からインクルードしていませんか?
ヘッダ内で構造体変数(pAA)を定義しているので、インクルードした回数だけ、同名の変数ができてしまいます。

Qmain関数終了時のreturnの意味は?

質問の題名通り、main関数終了時のreturnの意味が知りたいです。いつもは参考書に書いてある通り、return 0とやっていたのですが、参考書のサンプルプログラムでreturn 1というのがでてきた為、少し混乱しました。
参考書に説明が載っていないのでmain関数内でのreturnの意味をご教授願いたいです。よろしくお願いいたします。

Aベストアンサー

# 4です。

まず、0を返そうが、1を返そうが、そのプログラム自体の内部的な動作は通常変わりません。
戻り値で動作が変わる可能性があるのは「そのプログラムを呼び出したプログラム側」です。

例えば、make から呼び出された場合にそのプログラムが0以外が返したら、makeは「そのプログラムは失敗した」と考えて、処理を中断したりします。(続けて欲しいなら「成功」を返す、こういうために使います)
コマンドラインからあなたが手で入力したのなら、何も起きないかもしれません。

1を伝えられたOSが何をするかは環境(OS)によります。
gccは、Windows版もLinux版も各UNIX版もあるようなコンパイラですから、その版によって違う可能性があります。
ちなみに、手元の Minimalist GNU for Windows では 1 は EXIT_FAILURE でした=つまり前述のような失敗。
別のOS上のgccでは別の値にポートされている可能性も否定はできません。

C言語が保証しているのは、EXIT_SUCCESSを返したとき、その環境では成功と判断してくれるだろう値を返すことと、EXIT_FAILUREのときは失敗と判断してくれるだろう値を返すことだけです。
0は通常EXIT_SUCCESSですが、1はEXIT_FAILURE とは限りません(現実的には 0 と 1 が大半だと思いますが、EXIT_FAILUREが-1とかでも違反ではないです)。
但し、実際に判断できるかはOSにもよりますし、呼び出したプロセスがどう判断するかにもよります。

なお、Windows や Linux, その他私の知っている UNIX では、1を返されたからといって必ず何かが行われるということはありません。
前述のように、別のプログラム等から呼び出された場合に、そのプログラムが失敗と判断して何か処理を行う可能性はありますが、これらはあくまで呼び出し元のプログラムによります。
ITRON等の組込みOSでは、main が値を返す事は通常ありません。

憶測ですが、参考書のサンプルで return 1;となっているのは、例えば argv が求めているものと違うとか、fopen に失敗したとか、そういうケースではありませんか。
そういう異常処理が発生した場合に、もしも呼び出したプログラムがいたらそれを伝えられるように、EXIT_SUCCESS (0)以外の値を返すのは慣習です。
具体的にどんな値を返すかは、プログラムの設計次第になってしまいますが、1や-1を返したり、失敗原因ごとに決めた値を返したりします。
汎用性を重視するならEXIT_FAILURE等もありますが、知名度もやや低いですし、0以外なら何でもいいという認識の人も多いように思いますので、サンプルは単に1を返しているのではないかと。

# 4です。

まず、0を返そうが、1を返そうが、そのプログラム自体の内部的な動作は通常変わりません。
戻り値で動作が変わる可能性があるのは「そのプログラムを呼び出したプログラム側」です。

例えば、make から呼び出された場合にそのプログラムが0以外が返したら、makeは「そのプログラムは失敗した」と考えて、処理を中断したりします。(続けて欲しいなら「成功」を返す、こういうために使います)
コマンドラインからあなたが手で入力したのなら、何も起きないかもしれません。

1を伝えられたOSが...続きを読む

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

QC++でscanfは使えない?

お盆休みを利用してC言語の勉強をしようと思っています。
さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。

PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。

#include "stdafx.h"
#include <stdio.h>

void main()
{
int n;
scanf("%d",&n);
}

C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

Aベストアンサー

scanfはC言語の「文法」ではありません。
「標準ライブラリ」と呼ばれる、ライブラリに含まれる関数の一つでしかありません。


あと、具体的にどんなエラーメッセージが出たのですか?
メッセージの内容を読んで理解することも、プログラミング技術向上に大事なことです。

http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.AE.E5.95.8F.E9.A1.8C.E7.82.B9.E3.81.A8.E5.9B.9E.E9.81.BF.E6.96.B9.E6.B3.95
にあるように、scanfは使い方を間違えるととても「危険」な関数です。
そこで
http://msdn.microsoft.com/ja-jp/library/9y6s16x1%28v=vs.100%29.aspx
> セキュリティに関するメモ
とあるように、Microsoftとしてはセキュリティ強化版を使うことを推奨しています。
# 根本対策にはなってないという説もありますが。

そのため、設定次第では、scanfを使っただけで警告、またはエラーになります。

scanfはC言語の「文法」ではありません。
「標準ライブラリ」と呼ばれる、ライブラリに含まれる関数の一つでしかありません。


あと、具体的にどんなエラーメッセージが出たのですか?
メッセージの内容を読んで理解することも、プログラミング技術向上に大事なことです。

http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.AE.E5.95.8F.E9.A1.8C.E7.82.B9.E3.81.A8.E5.9B.9E.E9.81.BF.E6.96.B9.E6.B3.95
にあるように、scanfは使い方を間違えるととても「危険」な関数です。
そこで
http://msdn.microsoft.com/ja...続きを読む


人気Q&Aランキング