不思議な現象 (Visual Studio Community 2019)
不思議な現象に遭遇したけど、書き残す場所が他に無かったのでここに書く。
適当なフォルダ(ここではC:\temp)を作成して、以下の内容の a.c を作成する。(正しいコードなら何でも良い)
#include <stdio.h> #include <windows.h> // 再現のためにこれが必要 main() { printf("Hello Happy World\n"); }
これをビルド(コンパイルしてリンク)する。
C:\temp>CL a.c Microsoft(R) C/C++ Optimizing Compiler Version 19.27.29111 for x86 Copyright (C) Microsoft Corporation. All rights reserved. a.c Microsoft (R) Incremental Linker Version 14.27.29111.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:a.exe a.obj
当然ビルドは成功する。
... のだが、ここで a.c と同じ場所に以下の内容の RPC.h を作成する。
#error naniittenda okusawa wa meguroku daro!
もう一度ビルドしてみる。
C:\temp>CL a.c Microsoft(R) C/C++ Optimizing Compiler Version 19.27.29111 for x86 Copyright (C) Microsoft Corporation. All rights reserved. a.c C:\temp\rpc.h(1): fatal error C1189: #error: naniittenda okusawa wa meguroku daro!
何故か失敗する。
... #include <windows.h> を消すとビルド成功するので windows.h の中から何故か RPC.h を include してしまっているように見える。
windows.h の先に #include "rpc.h" という記述があっても、そのファイルからの相対になるはずだし、
#include <rpc.h> という記述があっても、環境変数 INCLUDE に無い C:\temp を探しにくるはずは無い。
深追いしたくないので、ファイル名を変えて回避した。
1. Callisto · stackprobe/Factory@6c14c85 · GitHub
2. Callisto · stackprobe/Factory@6c14c85 · GitHub