在引号中使用定义宏及其值

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 被定义为宏。