FAQ検索結果

検索キーワード:

Q#include < 空白 afxwin.h 空白 >という形式の構文は解析できないのでしょうか? QA・C++ の全バージョン

A
QA C++では解析することができません。理由は次の通りです。

QA C++は<>内に空白文字が記述されていた場合、空白文字をヘッダファイル名 の一部と見なして解析するようになっています。
また、コンパイラの中にはQA C++と同様の解釈をするようになっているものも あります(例えばGNU G++)。#include < iostream > // QA C++はヘッダファイルを見つけられない。#include <iostream> // QA C++はヘッダファイルを見つけられる。QA C++はこの構文をエラーとして扱います(該当箇所には34番の警告が出力されます)。
空白文字を記述した場合と記述しなかった場合とで文法的な意味は変わらないので、恐れ入りますが、ソースコード側を修正して解析できるようにしてください。

回答を閉じる

Qクラス定義の中以外に記述した friend class XXX; という形式の構文は解析できないのでしょうか? QA・C++ の全バージョン

A
ISO C++違反の構文であるため無視して解析されます。理由は次の通りです。

friend修飾子は、friend修飾子付きで宣言された関数やクラスに、 それらを包含するクラスのprivateやprotectedメンバへのアクセス権限 を与えるという役割を持ちます。
別の言い方をすると、friend修飾子は、friend修飾子付きで宣言された 関数やクラスと、それらを包含するクラスを結びつける役割を持って いることになります。
この役割が表す通り、friend修飾子は、クラス定義の中で記述される ことが前提になっています。
このため、次の構文はISO C++違反になります。 friend class CFriend; class CTest { public: void func(CFriend* p); }正しい構文は次の通りになります。 class CTest { friend class CFriend; public: void func(CFriend* p); }QA C++はISO C++に従って前者の構文をエラーとして扱います(該当箇所には254番の警告が出力されます)。
完全に不適切な構文になりますので、恐れ入りますが、ソースコード側を修正して解析できるようにしてください。

回答を閉じる

Q置換文字列内で##を使用しているマクロから同様のマクロを呼び出すと解析できないのでしょうか? QA・C++ の全バージョン

A
マクロの記述内容によっては、ISO C++違反の構文になるため解析することができません。

ISO C++言語規格書の16.3.4には次の規則が記されています。

オブジェクト形式マクロ 及び 関数形式マクロのいずれの呼出しにおいても, その置換内容列を再検査して, 更に置き換えるべきマクロ名があるかどうか を調べる前に, 置換内容列中の各前処理字句## (実引数からもたらされた 前処理字句 ## は除く。) の出現を削除し, その直後にある前処理字句と その直後の前処理字句とを連結する。例えば、次のようなコードを記述した場合、 #define MACRO1(x) func(data_ ## x) #define MACRO2(y) MACRO1(## y ##) #define ONE 1 void func(int x) {} int main(void) { int data_1 = 1; MACRO2(ONE); return 0; }MACRO2の展開結果は、data_1 にはなりません。MACRO2の展開結果は、data_ONE になります。これは、MACRO1とMACRO2の両方のマクロが、置換文字列内で##を使用し、 MACRO2がMACRO1を呼び出しているので、ISO C++に従った場合、 ONEが独立したマクロとして認識されるよりも前に、 data_ONEという文字列が生成されるからです。
QA C++はISO C++に従って解析し、MACRO2(ONE) を data_ONE に展開するので、 上記のコードをエラーとして扱います (該当箇所には400番の警告が出力されます)。
本問題に遭遇した場合は、恐れ入りますが、適宜回避策があるかどうかを ご相談ください。
なお、上記のコードの場合は、 「MACRO1(## y ##) → MACRO1(y)」に記述し直すことができれば、 ISO C++に従った構文になるので、QA C++が正しく解析できるようになります。

回答を閉じる

Q例えばハードウェア・クラッシュの発生後などに、借用(BORROW)したライセンスを適切に解放する方法はありますか? QA C7.2.3J以下/QA C++2.5J以下

A
ライセンスを借用(BORROW;オフライン使用のためにチェックアウト)したクライアント・マシン上で問題が起きている場合、そのライセンスを確実にサーバに戻すために必要な手順がいくつかあります。
Flexlmインストールディレクトリ内のlmremoveユーティリティ(Windows版の場合はlmutil lmremove)を使用すると、チェックアウトされた各フィーチャを解放することができ、lmstat (Windows版の場合はlmutil lmstat)を使用してフィーチャのチェックアウト状態を識別することができます。 最上位のフィーチャであるQACまたはQACPPの場合は、その他のフィーチャの最後(例えばQAC-gui)に続いて自動的に解放されます。したがっ て、明示的にこのフィーチャを解放する必要はありません。

回答を閉じる

QFLEXlmライセンス・サーバの通信プロトコルにUDPを使用できますか? QA C7.2.3J以下/QA C++2.5J以下

A
TCPがFLEXlmに対してサポートされている唯一のプロトコルです。
UDPはTCPと異なりパケットを管理しません。存在しない、または順序が誤っているパケットによりライセンス・サーバに問題が起こり、事前設定されたタ イムアウト時刻(デフォルトでは45分)までサーバがライセンスをロックしてしまう可能性があるため、UDPはサポートされていません。

回答を閉じる

Q変数名に and や or を使用すると解析できないのでしょうか? QA・C++ の全バージョン

A
ISO C++違反の構文であるため解析することができません。理由は次の通りです。

ISO C++言語規格書の2.5-2には次のように記されています。

代替字句は, その綴りの違いを除いて, 言語のすべての面で, 正規字句と完全に 同等に振る舞う。代替字句は, 表2に示すとおりとする。表2 代替字句
 代替   正規   代替   正規 
 and   &&   and_eq   &= 
 bitor   |   or_eq   |= 
 or   ||   xor_eq   ^= 
 xor   ^   not   ! 
 compl   ~   not_eq   != 
 bitand   &     

一般的には"正規"欄に記述された字句を使用しますが、 C++ではこれらの字句の代わりに、"代替"欄に記述された字句を使用 することができます。具体的には、一般的に次のように記述するコードを void func(int a, int b) { if( a && b ) { } }次のように記述することができます。 void func(int a, int b) { if( a and b ) { } }このように、ISO C++では代替字句が正規字句と完全に同等に振る舞うことを 要求しているので、これらの代替字句を変数名や関数名の代わりに 使用することはできません。例: void func(void) { int and; // C++では int &&と同等 }QA C++はISO C++に従って解析するので、上記の構文をエラー として扱います(該当箇所には14番の警告などが出力されます)。
恐れ入りますが、代替字句を変数名や関数名として使用している場合は、 名称を変更して解析できるようにしてください。

回答を閉じる

QQA Cの一部のメッセージの先頭に付与されている記号([U]や[C])は何を意味しているのでしょうか?

A
QA Cの一部のメッセージの先頭に付与されている記号は、QA Cの次のグループ の略称を示しています。 これらのグループは、ISO C言語規格の未規定の動作、未定義の動作、処理系定義の 動作、翻訳限界、文法違反、言語拡張に関わるメッセージになるため、 他のメッセージと区別するために記号が付与されています。

表1 QA C解析メッセージ記号
記号 内容
[U] 明記された未定義の動作
CMA 未定義
[S] シンタックスエラー
[C] 標準制約違反
[E] 言語拡張
[I] 処理系定義
[u] 明記されていない未定義の動作
[L] 最小限界値を超過
[Q] QAC の設定に不備がある
[C99] C90 では定められておらず C99 で定められている文法が使用されている


なお、データフロー解析には、特定のデータフロー問題の識別メッセージに対する状況を示す語として、次の5つの用語が使用されます。

表2 データフロー解析メッセージ記号
記号 内容
<C> Constantの略となります。
厳密に言うと、Constantメッセージはデータフロー解析メッセージではありません。 これは、制御フロー解析または変数のステータスの解析を行わずに推定できる問題を検出します。
<D> Definiteの略となります。
Definiteメッセージは、明らかに起こる問題を検出します。
<A> Apparentの略となります。
Apparentメッセージは、コードの別の場所にある、条件付き演算(? :)、if文またはswitch文に関連付けられた特定のパスが常に冗長ではない場合に起こる問題を検出します。
<S> Suspiciousの略となります。
Suspiciousメッセージは、ループ構造の実行中に、ある条件が実現しない場合に起こる問題を検出します。
<P> Possibleの略となります。
Possibleメッセージは、「データフロー解析エンジンの制約」または「コードがより決定的な結論を導けるように記述されていない」ことが原因で、不確実になっている問題を検出します。
※データフロー解析については、「データフロー解析(DFA)とはなんですか?」をご覧ください。

回答を閉じる

Qデータフロー解析(DFA)とはなんですか?

A
データフロー解析(DFA)は、関数内で変数がとり得る値の範囲や、 if 文等の分岐による処理の流れを考慮した解析で以下のような問題点を検出します。 また、QA・C/QA・C++では、一部のメトリックスの計測がDFAの実施を必要とします。 [DFAで検出される問題点] ・配列の領域外アクセス ・ゼロ除算 ・NULLポインタアクセス ・オーバーフロー ・値が設定されていない変数の使用 ・常に「真」または「偽」になる式 ・到達不能なコード ・無限ループ ・別々のオブジェクトを指すポインタ同士の比較 ・別々のオブジェクトを指すポインタ同士の差 ・過剰な右または左シフト ・return文が欠落しているコード ・負の値を符号なし型に代入しているコード ・冗長な代入式 など DFAはQA・C 6.2J、QA・C++ 3.0J で導入され、バージョンアップと共に改良されてきております。特に QA・C では QA・C 8.0J において大幅に改良されました。これに伴って QA・C 8.0J 以降では、DFA によって検出される警告メッセージが変更になっています。 QA・C 7.2.3J 以前のバージョンではDFAは常に実施されていましたが、QA・C 8.0J 以降および、QA・C++ では DFA は標準状態では実施しない設定になっておりますのでご注意下さい。

回答を閉じる

QBoostライブラリを使用したコードを解析することはできますか?

A
QA C++はBoostライブラリに対応しています。
ただし、ご利用になられているQAC++のバージョンによって解析できるBoostライブラリのバージョンが異なります。また、Boostライブラリを使用したコードを解析する際は、 保守ユーザ様向け情報ページで公開しているBoostライブラリ解析補助 ツールをご利用ください。

回答を閉じる

QQAC/QAC++でユーザ定義のルールを作成する方法はありますか?

A
QAC/QAC++は以下のユーザ定義可能なルールをサポートしています。
  • アナライザ・パーソナリティにおいて警告対象関数(warncall)機能を使用することによる、使用禁止の関数呼び出しに対する警告
  • 関数、ファイル、または(QAC++の)クラス・メトリックスに関するしきい値の超過に対する警告
  • 2次解析アドオン・モジュールによる命名規則の一連のチェック
  • 詳細なコード・レイアウトの一連のチェック(QAC++のみ)
MISRA-Cおよびその他のコーディング規格については、ルールのうち最大で約10%がQAC/QAC++の標準機能では生成されないため、2次解析モ ジュールを提供しています。ユーザ自身が構文解析結果を使用して2次解析を行うことも可能ですが、要望していただければ、2次解析機能として検討させてい ただきます。まず 技術サポート宛にお問い合わせください。

回答を閉じる

QQA·C/QA·C++がソースファイルを解析できないケースはありますか?

A
QA·Cの場合は、『ISO C標準規格を逸脱したコンパイラ独自の拡張機能』が 使われているとき、QA·C++の場合は、『ISO C++標準規格を逸脱した コンパイラ独自の拡張機能』が使われているときに、「標準状態の まま」では文法エラーが発生して解析できないことがあります。

また、ソースファイルから #include によってインクルードされて いるヘッダファイルが見つからない場合や、ソースファイルの中に コンパイラ独自の予約語(__interrupt, __attribute__ など)が 記述されている場合、アセンブラコードが記述されている 場合などにも「標準状態のまま」では文法エラーが発生して解析 できないことがあります。

このような状態になった場合は、QA·CまたはQA·C++に解析 オプションを設定するなどして、「標準状態」を変更し、 文法エラーを解消する必要があります。
いくつかのコンパイラについては、QA·C/QA·C++の開発元である Programming Research社や、弊社が準備した設定ファイルが ありますので、文法エラーが発生してお困りの場合は、まず 技術サポート宛にお問い合わせ ください。

なお、QA·C/QA·C++は、バージョンが上がる度にコンパイラ独自の 拡張機能への対応を充実させています。最新のバージョンに移行 して頂くことで、特別な設定なしで解析できるようになるものも あります。

回答を閉じる

Q地理的に分散した拠点における同時並行開発をサポートしますか?

A
サポートします。地理的に分散した拠点間で情報を共有するには、 「中央のリポジトリに対して高速にネットワーク・アクセスする」か 「リポジトリの複製を用いてそれらを同期する」という手法が考えられます。 PERFORCEは、前者の手法を採用しています。
PERFORCEのファイル・アクセスにおいては、特定のネットワーク・ファイルシステム(NFS等)を 必要とせず、またデータのトラフィックも最小限に抑えられています。 つまり、WANのようなThin Network(細いネットワーク)においても十分なパフォーマンスが得られるため、 「リポジトリの複製を用いてそれらを同期する」ための面倒な環境と管理手順を必要としません。
P4Proxyを使えば、ネットワークのパフォーマンスを さらに改善することができます。

回答を閉じる

Qライセンスは、どのような単位で必要になりますか?

A
PERFORCEのライセンスは、ユーザ・ロックのライセンスです。 したがいまして、特定の1ユーザに対して1ライセンスが必要となります。 このユーザはPERFORCEサーバごとに管理されます。
なお、このユーザ情報はPERFORCEが独自に管理する情報ですので、 NISやWindowsのドメインは必須ではありません。
ライセンスファイルを持たない場合でも、2ユーザまでであれば、製品版と同じ機能をご使用になれます。 ライセンスに関する詳細は、こちらをご覧ください。

回答を閉じる

Qインストール手順を教えて下さい。

A
PERFORCEのインストール(およびアップグレード)は非常に簡単です。 東陽テクニカのWebサイトにおいて、その手順を図解入りで説明しておりますので、 恐れ入りますがそちらをご覧下さい。 基本操作のご紹介をご覧下さい。

回答を閉じる

QPERFORCEのリビジョン管理において、RCSのキーワード拡張($Id$、$Date$等)は使えますか?

A
使えます。PERFORCEのファイルタイプという機能で「RCSのキーワード拡張」を選択することによって、 リビジョン管理されたファイルにRCSキーワード拡張を記述し、ファイル参照時にそれを展開することができます。
具体的なキーワードの情報が、 コマンド・リファレンスに書かれていますのでご参考にして下さい。

回答を閉じる

Qパフォーマンス改善技法

A
概要

この記事では、大規模サイトのための様々なパフォーマンス改善技法を記述しています。

詳細

PERFORCE システム管理者ガイド』の第7章「PERFORCEのパフォーマンス調整」にある「サーバの停滞を防止する」を必ずお読みください。以下の技法の大部分は、その章で詳しく説明しています。
 
古い PERFORCE のリリースを稼動させている場合は、アップグレードを検討してください。PERFORCEの各リリースでは、それ以前のバージョンよりもパフォーマンスの 改善が図られています。現在のリリースバージョンについては、弊社ホームページの PERFORCE ソフトウェア・ダウンロード をご覧ください。
 
応答時間が遅い理由には、サーバマシンのリソースが不適切であること以外の理由もあります。例えば、以下に示す原因で起きる、不要なデータベースのロックです。
- 効率の悪いスクリプト
- 大規模なディポに対する無制限のクライアント・ビュー、およびプロテクションの未設定
- 膨大なデータセットに対して、未熟なユーザが無意識に実行したコマンド
 
データベースがロックされている状態を除 き、すべてのPERFORCEサーバの動作は非同期かつ並列で行われています。しかし、大規模なサイトにおける開発のピーク時に、大きいデータセットに対 して実行されるユーザ要求とスクリプトの組み合わせによっては、サーバマシンで過剰なページングをはっせいさせることがあります。 大規模な操作(膨大なラベルの再作成、巨大なワークスペースでの最初の同期など)は、業務時間外に計画することをお勧めします。それが不可能であれば、弊社テクニカルサポートに連絡し、PERFORCEサーバへの大きな要求を「サイド・トラッキングする」方法をお問い合わせください。
 
チェックポイント作成時、 PERFORCEサーバのデータベースはロックされます。お使いのPERFORCEサーバのデータベースが非常に大きいことによって、チェックポイント作 成に相当な時間がかかる場合は、チェックポイント作成を業務時間外に実行してユーザが影響を受けないようにします。それが不可能であれば、弊社テクニカルサポートに連絡して、オフライン・チェックポイントの実施方法をお問い合わせください。
 
PERFORCE サーバ動作させるだけならば、ハードウェア仕様は特に問いません。しかしながら、もしPERFORCEサーバが処理の限界に近づいている場合は、SMP(対照型マルチプロセッサ)マシンにアップグレードすることを検討してください。
 
非常に複雑なワークスペース・ビューまた はブランチ・ビューを用いた場合、ある程度、処理時間がかかることがあります(例えば、10万個のファイルについて300行のブランチ・ビューをスキャン する場合、1分から2分かかることがあります)。なるべく、複雑なビューを使用しないようにしてください。 (その方がユーザの操作も容易です。)
 
p4 obliterate は、業務時間外に最後の手段としてのみ使用してください。2004.2以前のリリースでは、非常に大きいディポがあると、obliterate の処理に何時間もかかることがあり、その間ユーザがロックアウトされます。2004.2以前のサーバでは、どれほど大きいデータベース・ファイルでも、そ の全体をコマンドラインの各引数に対して一度ずつスキャンします。(『PERFORCEシステム管理者ガイド』の第7章に記述されている「一時クライアントによる手法」を使用して、obliterate のコマンドライン引数を1個に減らすことができます。)
 
2005.1以降のリリースでは、 obliterate は高速化されています。2005.1以降のサーバでは、ファイルをスキャンする代わりに、より効率的なアルゴリズムを使用してデータベース・ファイル内で 削除すべきデータを探します。リリース2005.1では、アルゴリズムの1つにおいて各クライアントに設定されたMapStateを利用するため、すべて のクライアントにMapStateを設定することによって、非常に速く obliterate が処理されます。(なお、MapStateが実装されたのはリリース2005.1まででした。2005.2以降のリリースではMapStateを必要とせ ずに最適化されているため、MapStateは2005.2以降のリリースには存在しません。)リリース2005.1では、任意のクライアントから以下の シェルコマンドを使用して、すべてのクライアントのMapStateを設定することができます。 p4 clients \ | sed 's/^Client \([^ ]*\).*$/p4 -c \1 fstat \/\/depot\/file/' \ | /bin/sh > /dev/null 2>&1

回答を閉じる

QQA·C/QA·C++のリリース情報を教えてください。

A
最新版のQA·C/QA·C++に関する情報は、次のページをご確認ください。
 

回答を閉じる

Qディポを他のサーバマシンに移動することはできますか?

A
できます。アーキテクチャ(OS)が同じか否か、行末コード(LFまたはCR/LFまたはCR)が 同じか否かによって手順は異なりますが、例えばアーキテクチャが同じ場合であれば、 ディポのデータベースとバージョン管理されたファイルをコピーするだけです。
この件に関する詳しい情報が、システム管理者ガイド に書かれていますのでご参考にしてください。
ただし、パス名に日本語が含まれている場合は、特別な手順が必要となりますので、 事前に弊社テクニカルサポート までお問い合わせください。 もし、将来的に異なるアーキテクチャ間でディポを移動させる予定がある場合は、 移動が完了するまで、日本語のパス名を持たないようにすることをお勧め致します。

回答を閉じる

Q日本語ファイル名のファイルを登録できますか?

A
できます。ファイル名だけでなく、ディポ名、クライアント・ワークスペース名、ユーザ名、ジョブ名、 ブランチ名、ラベル名、各種メタデータ等において、日本語(複数バイトコード)を使用することができます。
日本語版PERFORCEのご利用にあたっては、必ず事前に次のドキュメントをお読みください。

PERFORCE 2009.2に関する注意事項
Perforce 国際語モードに関する注意事項

回答を閉じる

QPERFORCE(ベータ版を除く)で作成したディポ(リポジトリ)は、PERFORCEをバージョンアップしても引き続き使用できますか?

A
多くの場合はできます。PERFORCEを再インストールしても、ユーザ資産であるディポは何ら影響を受けません。 ただし、ベータテスト中に重大な修正を行った場合はこの限りではありません。詳しくは、弊社テクニカルサポートまでお問い合わせください。

回答を閉じる

FAQ一覧へ戻る