我正在编写一个连接到postgreql db的C程序,我正在尝试检查表:
PGresult *re=PQexec(connection, "SELECT to_regclass('fp_stores_data')");
此变量是全局变量。但是当我编译代码时会发生此错误:
db.c:6:20: error: initializer element is not constant
6 | PGresult const *re=PQexec(connection, "SELECT to_regclass('fp_stores_data')");
如果这是一个全局变量,则C要求使用编译时已知的值对其进行初始化;如果需要调用PQexec()
,则这是运行时的事情,不允许这样做(正如编译器告诉您的那样)。
如果变量需要保持全局性,最好是将re
变量初始化为NULL,并PQexec()
在建立数据库连接后立即将实际的调用/赋值移动到运行时代码中。
一个非数据库的示例:您不能使用运行时调用来初始化任何静态变量,因此:
FILE *infile = fopen("myfile.txt", "r"); // NO
int main()
{
infile = fopen("myfile.txt", "r"); // YES
...
这是确定的变量是静态的; 这只是在运行时必须进行的分配。
或者,如果变量是local,则可以使用运行时调用对其进行初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句