在引号中使用定义宏及其值
Using define macro and its value in quotes
出于好奇编写了一些 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)
一样使用它们
?
问题二
我可以在带引号的字符串中使用 DB_TABLE
的值吗? IE。 mysql_query(con, "SELECT * FROM DB_TABLE")
如果是这样 - 在这里使用它的正确方法是什么?
Is it a good idea to store host, user etc in preprocessor macros?
这是常见的做法,至少如果这些值在程序的上下文中可以被视为常量。
或者,您可以通过以下方式定义常量:
const char * db_host = "localhost";
这里的缺点是如下所示的简单连接不起作用。
Can I use DB_TABLE
's value inside a quoted string?
不,但你可以这样做:
mysql_query(con, "SELECT * FROM " DB_TABLE);
答案 1: 从技术上讲,您可以按照您显示的方式定义它,但有时,使可能更改的参数(如主机名、 username) 作为环境变量,以及 read them during the program execution。这使您的程序在频繁更改时更加健壮。保持不变的参数肯定可以用作 #define
预处理器(如表名)。
可以找到示例 here。
回答2:不可以,不能那样用。但是,由于预处理器 MACROS 是编译时替换,您可以利用字符串连接,例如
mysql_query(con, "SELECT * FROM " DB_TABLE);
其中 DB_TABLE
被定义为宏。
出于好奇编写了一些 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)
一样使用它们
?
问题二
我可以在带引号的字符串中使用 DB_TABLE
的值吗? IE。 mysql_query(con, "SELECT * FROM DB_TABLE")
如果是这样 - 在这里使用它的正确方法是什么?
Is it a good idea to store host, user etc in preprocessor macros?
这是常见的做法,至少如果这些值在程序的上下文中可以被视为常量。
或者,您可以通过以下方式定义常量:
const char * db_host = "localhost";
这里的缺点是如下所示的简单连接不起作用。
Can I use
DB_TABLE
's value inside a quoted string?
不,但你可以这样做:
mysql_query(con, "SELECT * FROM " DB_TABLE);
答案 1: 从技术上讲,您可以按照您显示的方式定义它,但有时,使可能更改的参数(如主机名、 username) 作为环境变量,以及 read them during the program execution。这使您的程序在频繁更改时更加健壮。保持不变的参数肯定可以用作 #define
预处理器(如表名)。
可以找到示例 here。
回答2:不可以,不能那样用。但是,由于预处理器 MACROS 是编译时替换,您可以利用字符串连接,例如
mysql_query(con, "SELECT * FROM " DB_TABLE);
其中 DB_TABLE
被定义为宏。