C,符号常量定义中出现错误(可能在函数参数中)

标签 c gcc syntax-error constants

我在编写的 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 */

我不知道为什么会导致该错误。我已经检查了打开的评论、选项卡、打开的字符串等,但我无法修复此错误。编译时,此错误是唯一的错误,只是每次在 main 中的函数调用参数中使用 LAST_INDEX 时都会重复该错误。我知道我的程序的其余部分有错误,但编译甚至没有显示它们,让我相信它无法克服这个问题。

函数如下所示:

函数原型(prototype):

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)

感谢您的帮助!

最佳答案

问题是您试图声明函数参数调用 LAST_INDEX,但 LAST_INDEX 被定义为宏,因此会扩展为表达式。函数参数的声明符必须是单个标识符(您要为参数指定的名称),而不是表达式。

关于C,符号常量定义中出现错误(可能在函数参数中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58795904/

相关文章:

c - 什么是 C 中的内存高效双向链表?

c - 如何在 C 中创建动态结构数组

c - [] c 中的指针操作

ruby - 将哈希传递给 p 会导致语法错误

c# - 转换参数C#/SQL Server失败

c - 理解程序集 : -O2 if branching

c++ - 添加c++ 11编译器后打开devc++时显示警告

从全局内联汇编调用静态函数

c++ - Clang 和 GCC 在定义之前对函数调用的诊断行为不同?

c - 在配置阶段确定错误位置的工具/技巧 - PHP 扩展编码