stackprobe7s_memo

何処にも披露する見込みの無いものを書き落とす場所

不思議な現象 (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