出于好奇而编写一些C代码,我想将MySQL连接的某些值移至一种const
。
问题1 将主机,用户等存储在预处理器宏中是个好主意吗?即:
#include <my_global.h>
#include <mysql.h>
#define DB_HOST "mysqlhost.com"
#define DB_USER "mysqlusername"
#define DB_TABLE "tablename"
...
以后可以像mysql_real_connect(con, DB_HOST, DB_USER, DP_PASS, DB_NAME, 0, NULL, 0) == NULL)
一样使用它们
?
问题2
我可以在带引号的字符串中使用DB_TABLE
的值吗?即mysql_query(con, "SELECT * FROM DB_TABLE")
如果是的话-在这里使用它的正确方法是什么?
答案 0 :(得分:6)
答案1:从技术上讲,您可以按照显示的方式定义它,但是有时,将可能会更改的参数(例如主机名,用户名)作为环境变量是有意义的和read them during the program execution。这使您的程序在进行频繁更改时更加强大。保持不变的参数肯定可以用作func getFireBaseData(){
db.collection("categories").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err.localizedDescription)")
} else {
for document in querySnapshot!.documents {
self.categoryDictionary.append(document.data())
}
self.tableVu.reloadData()
}
}
}
预处理程序(如表名)。
可以找到一个示例here。
答案2:不,您不能那样使用它。但是,由于预处理程序MACROS是编译时替换,因此可以利用字符串连接,例如
#define
其中mysql_query(con, "SELECT * FROM " DB_TABLE);
被定义为MACRO。
答案 1 :(得分:4)
将主机,用户等存储在预处理器宏中是个好主意吗?
通常是这样,至少在程序上下文中可以将这些值视为常量。
或者,您可以通过以下方式定义常量:
const char * db_host = "localhost";
这里的缺点是,如下所示的简单串联无法正常工作。
我可以在带引号的字符串中使用
DB_TABLE
的值吗?
否,但是您可以这样做:
mysql_query(con, "SELECT * FROM " DB_TABLE);