none
コンパイラのオプションに /Zc:trigraphs を指定することで有効にできる RRS feed

  • 質問

  • こんにちは!いまC言語の勉強をしております。3文字表記についての質問です。

    PC環境はWin10,使っているソフトはVS Express 2013 for Desktopです。

    ??=include <stdio.h>

    int main() ??<
    printf("??= , ??( , ??)??/n");
    return 0;
    ??>

    これをデバックなしで実行するとエラーになります

    エラー 1 error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? e:\lesson29\lesson29\lesson29.cpp 11 1 lesson29

    コマンドでこのように表示されます↓↓

    '"E:\lesson29\Debug\lesson29.exe"' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    続行するには何かキーを押してください . . .

    エラーで指摘されているように、プロジェクトの設定でトライグラフを有効化する必要があります。
    「ソリューション エクスプローラー」でプロジェクトを右クリックし「プロパティ」を選択してC/C++コマンドラインから/Zc:trigraphsを追加してすべてのオプションに追加されていることを確認いたしました。

    なぜエラーになるのでしょうか?原因を知りたいです。どこが間違っているのでしょうか??


    2015年9月1日 3:32

回答

  • プリコンパイルヘッダーを使用する<Yu>になっているからですね。
    プロジェクトのプロパティDLGの「構成プロパティ」の
    「プリコンパイル済みヘッダー」のオプションを「使用しない」にしてみてください。
    そのかわり、もちろん必要なヘッダーをインクルードする必要があります。

    気になるのは
    1.いまどきトリグラフを使う人はいません(もちろん使えますが)。
    2.提示されたメイン関数の書き方は古すぎます。
     ウィザードで生成されるコードを参考にしてみてはどうでしょう。

    ◇ところで、同内容の別のスレッドにコメントしたのですが、削除されてしまったようなので再度コメントしました。

    • 回答としてマーク moriuchi 2015年9月1日 6:46
    2015年9月1日 5:06

すべての返信

  • エラーで指摘されているのはソース冒頭に stdafx.h をインクルードしていない点で、それはトリグラフとは無関係の問題のように見えるのですが。

    なお、VC++において#include "stdafx.h"は特別扱いされているため、これに限ってはトリグラフを使用することができないかもしれません。


    • 編集済み Hongliang 2015年9月1日 4:27
    2015年9月1日 4:26
  • プリコンパイルヘッダーを使用する<Yu>になっているからですね。
    プロジェクトのプロパティDLGの「構成プロパティ」の
    「プリコンパイル済みヘッダー」のオプションを「使用しない」にしてみてください。
    そのかわり、もちろん必要なヘッダーをインクルードする必要があります。

    気になるのは
    1.いまどきトリグラフを使う人はいません(もちろん使えますが)。
    2.提示されたメイン関数の書き方は古すぎます。
     ウィザードで生成されるコードを参考にしてみてはどうでしょう。

    ◇ところで、同内容の別のスレッドにコメントしたのですが、削除されてしまったようなので再度コメントしました。

    • 回答としてマーク moriuchi 2015年9月1日 6:46
    2015年9月1日 5:06
  • ご回答ありがとうございます。C#をやり始めたのですがC言語もわからずいきなりは私にとって難しくって基本からやり始めたところでこの3文字表記に出くわしmicrosoft visual C++でも/Zc:trigraphs を追加すれば実行できるとのことでやりましたがエラーが出てしまいどんどん深みにはまってしまいました。

    プロジェクトのプロパティDLGの「構成プロパティ」の「プリコンパイル済みヘッダー」のオプションを「使用しない」にしてみてください。そのかわり、もちろん必要なヘッダーをインクルードする必要があります。

    参考にさせていただいてやってみます。皆様ありがとうございました

    追伸:早速試させていただきました。下記の通り表示されました。ありがとうございます

    次へ進むことができます

    # , [ , ]

    続行するには何かキーを押してください . . .

    • 編集済み moriuchi 2015年9月1日 8:04
    2015年9月1日 7:06
  • 質問からは脱線します。

    2.提示されたメイン関数の書き方は古すぎます。

    余談ですが、一周回ってVisual Studio 2015のウィザードで生成されるコードは

    int main()
    {
        return 0;
    }
    

    になっています。よろしければご確認ください。

    2015年9月1日 8:30
  • 佐祐理さん、補足ありがとうございます。
    VS2015はまだ使っていなかったので気が付きませんでした。
    使い始めたら確かめてみるつもりですが、
    crtのスタートアップコードも変更されているのでしょうね。
    本題に関係なくてすみません。
    2015年9月1日 9:16