1

C++ で書かれたこのコードの意味は何ですか?

PGBulkInserter pgBulkInserter(postgreSQL, HOST_TRAFFIC_SCHEMA_NAME, date,
                            flushSize, "%ud, %ud, %ud, %ud, %ud, " \
                            "%ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, " \
                            "%Vud, %Vud, %Vud, %Vud, %Vud, %ud, %ud, " \
                            "%ud, %ud, %ud");

のインスタンスを作成していることは理解していますが、 などPGBulkinserterの意味は何%ul, %ud %vudですか? PGbulkinsterterより深い意味(つまり、パラメーターの数など)を説明していただけますか?

それらは type などのようなものだと思います。署名されていないバージョンを意味する%d, %fかどうかは誰にもわかりますか (私は推測しています)。%ud%d

%ud編集:それは 32 ビットの符号なし 10 進数であり、別のコードで時間に使用されると確信しています。また、"%ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, "テーブル内のすべてのエントリのタイプに関連しています。さて、問題は\ですか?

4

1 に答える 1

1

これが初期化 (コンストラクター呼び出し) であると想定される場合、5 つの引数がコンストラクターに渡されます。最後の引数は文字列リテラルです。C++ 固有の意味はありません。その意味は機能によって決まります。関数のドキュメントを読んで、その意味を理解してください。fscanfC スタイルのフォーマット文字列 ( / ) に似ていますfprintfが、実際の指定子 ( など%Vud) は標準ではありません。

最後の引数は、実際には複数行に分割された単一の文字列リテラルです。C++ 言語は、連続する文字列リテラル (つまり、空白で区切られたリテラル) を 1 つのリテラルに連結します。たとえば、この一見別々のリテラルのシーケンス

"Hel" "lo" " worl" 
"d"

実際には、コンパイラによって単一のリテラルとして解釈されます

"Hello world"

\行末の文字により、プリプロセッサはソース ファイルの複数行を 1 行に結合します。そのためには、\文字は行の最後の文字でなければなりません(例のように)。たとえば、これ

in\
t\
  ma\
in(\
)

と同等です

int main()

言い換えれば、あなたのコードサンプルは本当に同等です

PGBulkInserter pgBulkInserter(postgreSQL, HOST_TRAFFIC_SCHEMA_NAME, date, flushSize, 
  "%ud, %ud, %ud, %ud, %ud, %ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, %Vud, %Vud, %Vud, %Vud, %Vud, %ud, %ud, %ud, %ud, %ud");

コードの作成者は、コンパイラにリテラルを連結させるには、最初にリテラルを強制的に 1 行にする必要があると考えていたようです。そのために彼らは\キャラクターを使用しました。ただし、リテラルは . がなくても連結されるため、完全に不要でした\

\特定のコード サンプルでは、​​各行の末尾にある文字を完全に削除できますが、プログラムにはまったく影響しません。\とにかく、リテラルが次の行に続くという事実に注意を引くために、とにかくそれらを使用することがあります。

于 2012-12-17T06:13:47.793 に答える