LINUX.ORG.RU

Ошибка компиляции на вызове dbm_open

 ,


0

1

Полностью текст не включаю, только самое интересное:

...
#include <fcntl.h>
#include <gdbm/ndbm.h>
...
int some_function(int action, int type, int source)
{
    DBM *db_file;
    ...
    db_file = dbm_open (DB_FILE, O_RDWR | O_CREAT, 0666); /* DB_FILE объявлен в самописном .h как #define DB_FILE = "~/.program_name/database" */
    ...
}

Компилирую с -Wall -ansi -lgdbm_compat, предупреждений нет, только на строчке с открытием базы данных вываливается ошибка:

change_data.c: В функции «change_data»:
change_data.c:18:24: ошибка: expected expression before «=» token
change_data.c:18:24: ошибка: слишком мало аргументов в вызове функции «dbm_open»
In file included from change_data.c:5:0:
/usr/include/gdbm/ndbm.h:55:14: замечание: declared here
Уже который час пытаюсь понять, что не так. Еще раз вкурил ман по функциям dbm_*, прочесал вывод поисковика, но так и не понял, как исправить такую ошибку и чем она вызвана. ЛОР, я тупой, или просто не знаю, где искать?

#define DB_FILE = "~/.program_name/database"

Надо же

#define DB_FILE "~/.program_name/database"

И вообще, define - зло.

unfo ★★★★★
()
Ответ на: комментарий от unfo

Вот это фэйл. Все-таки мне нужно, чтобы когда я писал код, за моей спиной кто-то стоял: сразу будут такие очевидные ошибки находиться.

Спасибо

> И вообще, define - зло.

А вот здесь поподробнее. define, конечно, не без определенных недостатков, но не настолько же

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от HerrWeigel

А вот здесь поподробнее. define, конечно, не без определенных недостатков, но не настолько же

В большинстве случаев вместо define лучше использовать константы, тогда таких совершенно неочевидных ошибок не будет.

Польза от define только в макросах.

unfo ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.