6

Visual C ++プロジェクトには、バージョンにDOTSの代わりにCOMMASを使用する次の宣言があることを確認しました。

#define FILEVER        11,0,2,0
#define PRODUCTVER     11,0,2,0
#define STRFILEVER     "11, 0, 2, 0\0"
#define STRPRODUCTVER  "11, 0, 2, 0\0"

ここにあるMSの記事にも、コンマを使用した同じ値があります(実際、上記の宣言はその記事に基づいています)。ここでCOMMASを使用するのはなぜですか?コンパイルされたファイルのプロパティを開くと、FileVersionは11.0.2.0と表示されますが、ProductVersionは11,0,2,0と表示されます。これについては、QAの友人がバグだと言っています:)。私が見逃している標準的なメカニズムや内部メカニズムはありますか?

4

1 に答える 1

6

最初の2つの定義では、Microsoftリソースファイルの構文でコンマが必要なためです。後の2つの定義では、Microsoftの規則はそこでもコンマに固執します。マイクロソフトはおそらく違うことを望んでいます。

ファイルバージョンは文字列以外のバリアントから取得され、ファイルエクスプローラーでドットで印刷されます。製品バージョンは文字列から取得されます。おそらく自分でドットを使って文字列を書くことができます。それは文字列です、それは問題ではないはずです。.rcただし、ファイルを手動で編集する必要があります。VisualStudioはコンマを書き込みます。

最初の2つの定義については、一般的なC++でコンマを選択する理由がわかります。もし持っていたら11.0.2.0、それはどんな文脈でも構文エラーであり、あなたができる唯一のことはそれを#演算子で文字列に変換することです。ただし、コンマを使用すると、配列または構造の定義に展開できます。のようにint version[] = { 11,0,2,0 };。これは、バージョンチェックインコードが必要な場合に便利です。

于 2012-10-22T07:48:02.247 に答える