%ud,%vud是什么

时间:2012-12-17 05:54:31

标签: c++ database types

用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有多少参数等)?

我认为它们类似于%d, %f等类型。有人知道%ud是否代表%d的无符号版本(我只是在猜测)。

编辑:我很确定%ud是一个32位无符号十进制数,用于另一段代码中的时间。此外,"%ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, "与表中所有条目的类型相关。现在,问题是什么是\

1 个答案:

答案 0 :(得分:1)

如果这应该是初始化(构造函数调用),那么它将5个参数传递给构造函数。最后一个参数是一个字符串文字。它没有特定于C ++的含义。它的意思是由功能决定的。阅读功能文档以了解其含义。它看起来类似于C风格的格式字符串(fscanf / fprintf),但实际的说明符(如%Vud)不是标准的。

最后一个参数实际上是跨多行分割的单个字符串文字。 C ++语言将连续的字符串文字(即由空格分隔的文字)连接成一个文字。例如,这个看似单独的文字序列

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

实际上被编译器解释为单个文字

"Hello world"

行尾的\字符会使预处理器将多行源文件合并为一行。为此,\字符必须是该行的最后一个字符(如您的示例所示)。例如,这个

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");

代码的作者显然认为,为了使编译器连接文字,必须先将它们强制为单行。为此,他们使用\字符。但是,它完全没有必要,因为即使没有\,文字也会被连接起来。

在您的特定代码示例中,您可以完全删除每行末尾的\个字符,它对程序完全没有影响。有时候人们会使用那些\只是为了引起人们的注意,即文字在下一行继续存在。