Обращаем внимание, что:: Это НЕ домашнее задание. Программа не является полной и не полностью функционирует, но должна, по крайней мере, компилироваться.Я использую препроцессор неправильно?
Я нахожусь в процессе самообучения с использованием книги C Primer Plus (Короче, я новичок в C). Я почти закончил читать всю книгу и работал над упражнениями для каждой главы, и время от времени я уходил по касательной. Это как-раз тот случай. Я столкнулся с особой проблемой, и я уверен, что это связано с директивами препроцессора.
Я использую MinGW (GCC для Windows) и сообщает:
Ошибка, отчеты GCC является:
nanfunct.c: несколько определение
nanite.c 'ключевые слова': первая определяется здесь
и т.д ... и т.д ... больше ошибок ...
Я уверен, что это вызвано включением нескольких файлов заголовков, но больше важно, чтобы заголовочный файл, который я создал, а затем включил, вызывает эту проблему.
Эта проблема, похоже, связана с массивами-указателями-символами (или массивами на основе строк), которые дублируются во время компиляции, хотя я говорю, чтобы определить ее, только если она не была предварительно определена.
, например:
#ifndef MENU_OPTIONS
# define MENU_OPTIONS ON
# if MENU_OPTIONS == ON
...some code here...
char * keywords[] = {
"copy", "help", "line",
"quit", "read", "write"
};
char * keyletters[] = {
"c", "h", "l",
"q", "r", "w"
};
# endif
#endif
Я использую три файл:
nanite.c -> исходного файл для основных()
nanfunct.c -> исходного файла для функций
nanproto.h -> файл заголовка для nanite.c и nanfunct.c
Внутри nanite.c и nanfunct.c I #includenanproto.h
исходные файлы, размещенные на Pastebin:
nanproto.h -> Заголовочный файл для nanite.c и nanfunct. с
nanite.c & nanfunct.c -> исходных файлов
Почему это происходит? Я думал, что #ifndef должен был продолжать подобные вещи?
Кому-то, кто не понимает, как работают компиляторы, явно было дано слишком мало голосов в свое время здесь. –
Я проигнорировал это, потому что, прежде чем вы неоднократно редактировали его, это был не очень полезный ответ. – immibis