C, Получение ошибок в определениях символических констант (возможно, в параметрах функций) - PullRequest
0 голосов
/ 11 ноября 2019

Я получаю эту ошибку в программе на C, которую я пишу:

progra10.c:48:25: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
#define LAST_INDEX ARRAY_SIZE - 1

и

program10.c:47:25: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
 #define ARRAY_SIZE       20
                         ^
program10.c:48:25: note: in expansion of macro ‘DATA_SIZE’
 #define LAST_INDEX      ARRAY_SIZE - 1
                         ^~~~~~~~~~
program10.c:64:42: note: in expansion of macro ‘LAST_INDEX’
 int  sequential_search(int seq_data, int LAST_INDEX, int search_target,

Я использую компилятор GCC с этой командой:

gcc -Wall -ansi -oprogram10.exe program10.c -lm

Этот код, по-видимому, относится к ошибке:

#define COURSE_NUMBER "C Programming" /* Class */
#define PROGRAM_NUMBER 10 /* Program Number */
#define PROGRAMMER_NAME "Name" /* Programmer's Name */
#define ARRAY_SIZE 20 /* Size of the array */
#define LAST_INDEX ARRAY_SIZE - 1 /* The last index in the array */

Я понятия не имею, почему это может быть причиной этой ошибки. Помимо прочего, я проверил наличие открытых комментариев, вкладок, открытых строк и не смог исправить эту ошибку. Во время компиляции эта ошибка является единственной ошибкой, только она повторяется каждый раз, когда LAST_INDEX используется в параметре вызова функции в main. Я знаю, что в остальной части моей программы есть ошибки, но компиляция даже не показывает их, что наводит меня на мысль, что это не может пройти через это.

Функции выглядят так:

Прототип функции:

int  sequential_search(int seq_data, int LAST_INDEX, int search_target, 
                                                   int target_location);

Вызов функции:

sequential_search(seq_data, LAST_INDEX, search_target, target_location);

Определение функции:

int sequential_search(int seq_data, int LAST_INDEX, int search_target,
                                                    int target_location)

Спасибо за помощь!

1 Ответ

1 голос
/ 11 ноября 2019

Проблема в том, что вы пытаетесь объявить вызов параметра функции LAST_INDEX, но LAST_INDEX определен как макрос, поэтому расширяется до выражения. Декларатором для параметра функции должен быть один идентификатор (имя, которое вы хотите дать параметру), а не выражение.

...