質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4603閲覧

Visual Studioにて#defineを検知してもらえない

void_390duke

総合スコア7

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/06/14 13:23

編集2020/06/14 13:57

現在Win32でプログラミングを書いていて, Windows.hをインクルードしようとしていたところ, 大量のエラーメッセージが表示されました. どうやら#define疑似命令が反応していない模様で, 自分で定数を作ろうとしても, 作ることができません. 例えば#define AAA 5と入力してもAAAが紫っぽい色になりません.

発生している問題・エラーメッセージ

いじってもいない大量のヘッダーファイルから#defineが反応していないです. ほとんどのエラーは

identifier "__In__" is undefined

のようなエラーです.
何度か#defineが反応することもあり, また実行には影響がないかもしれませんが, エラーメッセージが3779もあるため煩わしいです. また#defineが使えないと困るので.

該当のソースコード

C++

1#define AIJHOIFGHD 5 //反応しないです 2//初めの行の一番頭の文字の下に赤の波線が入ります. 3//どの命令を入力しても変化はありません. 4 5#include<windows.h> 6#include<windowsx.h>

試したこと

まずヘッダファイルが壊れているのかなと考え, ファイルを消してインストーラの復元ツールを試しましたが変わりませんでした. エラーの発生源は#defineとわかって以降方法が思いつきません.

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019(16.6.2)

###追記
なぜかwindows.hのインクルード文のみ削除すると#defineが再び反応する模様です.
エラー(これでも一部)です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2020/06/14 13:36 編集

プリコンパイル済みヘッダを使用する設定にした状態で、#include "pch.h"よりも前に#defineや#includeを書いているのでは?
segavvy

2020/06/14 13:38

このソースコードファイルの文字コード(UTF-8、UTF-16、Shift-JISなど)は想定通りのものでしょうか。もしかしたら、コンパイラがその辺りを正しく解釈できていないのかもと思いまして。
void_390duke

2020/06/14 13:40

返信ありがとうございます. いつも空のプロジェクトでプロジェクトを作っているのです関係ないはずです.
segavvy

2020/06/14 13:44

文字コードは関係なさそうですね、失礼しました。 (SHOMIさんのコメントされているpchの方が原因かも)
void_390duke

2020/06/14 13:44

プログラムには半角文字しか利用していないので, 問題ないかと考えていたのですが...(コメントも除外して実行してみたりもしています. ) VSの文字コード設定を調べてきます. ありがとうございます.
void_390duke

2020/06/14 13:49

空のプロジェクトで作成しても関係あるのでしょうか. プリコンパイル済みヘッダ付きのプロジェクトを作ったことがないのでよくわかっていません.
SHOMI

2020/06/14 13:52

>ほとんどのエラーはidentifier "__In__" is undefinedのようなエラーです. 省略していないエラーメッセージを書いてみてください。
void_390duke

2020/06/14 13:55

スクリーンショットを質問に貼るでもよろしいですか? 3779ものエラーを書くのは現実的でないので...
SHOMI

2020/06/14 13:56

新しくプロジェクトを作り直しても変化はありませんか?
void_390duke

2020/06/14 14:03

他の新しいプロジェクトでは問題ありませんでした. しかし過去にかいたものは同様のエラーになっています...コピーペーストでは問題ないようですが...
SHOMI

2020/06/14 14:08 編集

#include<windows.h>の前に文法的におかしなもの(#defineの#を抜いたり、aを一文字書く等)を書くと似たような状態になりますね。 おかしな文字(目視ではわからない変な文字コードや全角スペース等)が紛れ込んでいませんか? 一旦#include<windows.h>より前の行をすべて削除するとどうなりますか?
SHOMI

2020/06/14 14:12

問題のなかった新しいプロジェクトでのソースコードは書き直しですか? 問題の起きていたソースファイルをプロジェクトに追加すると、エラーになりますか?
SHOMI

2020/06/14 14:43

エラー一覧の方のE~はIntelliSenseのエラーです。Buildのみにすると何が出ていますか?(もしくはOutputタブのビルドのログ)
void_390duke

2020/06/14 15:08

#include<windows.h>を一行目にいきなりおいても全く同じと思われるエラーのままです. 問題の起きていたソースファイルをプロジェクトに追加すると、エラーになりますか?->なりませんでした. 方法は.cppをExisting itemとしてコピーせずに結び付けたので, ということは.cppには原因はなさそうです. Buildのみにすると何が出ていますか?->ビルド以前に打ち込むだけでエラーが出るのですが, どうなんでしょうか. 一応やってみるも変化なしです.
SHOMI

2020/06/14 15:18

ビルドは通るんですか? IntelliSenseのデータがおかしくなっているだけかも?
void_390duke

2020/06/14 15:25

この下に int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { return 0; } と入力するとビルドはSucceededを出します.
guest

回答1

0

ベストアンサー

  • プロジェクトを作り直すと再現しない
  • IntelliSenseのエラーが出ているだけでビルドは成功する

とのことから、IntelliSenseのデータベースが破損しているのでしょう。
ソリューション(拡張子sln)のあるフォルダの
.vs\ソリューション名\v16\Browse.VC.db(.vsは隠しフォルダ)
を削除(もしくは.vsフォルダを丸ごと削除)してソリューションを開きなおしてみてください。

投稿2020/06/14 15:35

編集2020/06/14 15:37
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

void_390duke

2020/06/14 15:43

その方法で解決できました. 過去のソリューションもすべてこの方法でできました. 丁寧な対応本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問