Использование макроса определения и его значения в кавычках - PullRequest
0 голосов
/ 25 января 2019

Написание некоторого кода на 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")

Если да - то как правильно использовать его здесь?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Ответ 1: Технически, вы можете определить его так, как вы показали, но иногда имеет смысл сделать параметры, которые могут измениться (например, имя хоста, имя пользователя) в качестве переменных среды,и читать их во время выполнения программы .Это делает вашу программу более устойчивой к частым изменениям.Параметры, которые должны оставаться неизменными, безусловно, могут использоваться в качестве препроцессора #define (например, имя таблицы).

Образец можно найти здесь .

Ответ 2: Нет, вы не можете использовать его таким образом.Однако, поскольку препроцессор MACROS является заменой во время компиляции, вы можете воспользоваться конкатенацией строк, например

mysql_query(con, "SELECT * FROM " DB_TABLE);

, где DB_TABLE определен как MACRO.

0 голосов
/ 25 января 2019

Хорошая идея хранить хост, пользователя и т. Д. В макросах препроцессора?

Это обычная практика, по крайней мере, если значения можно считать постоянными в контексте программы.

В качестве альтернативы вы можете определить константы, выполнив:

const char * db_host = "localhost";

Недостатком здесь является то, что простая конкатенация, как показано ниже, не будет работать.

МожетЯ использую значение DB_TABLE внутри строки в кавычках?

Нет, но вы можете просто сделать:

mysql_query(con, "SELECT * FROM " DB_TABLE);
...