预期的"",""或"..."在数字常量之前
Expected ',' or '...' before numeric const
我是C编程的新手,试图找出遇到的一些问题。当我写
#define N 5
void Sort(int *const array, int N);
编译器告诉我"Expected ", " or "…"' before numeric const '。在网上搜索后,发现这个问题可能是由于#define被调试为数值引起的。我确实通过不使用常数n的#define通过编译器。但是,我想知道我应该如何修改上面的两行,这样我就不会得到那个错误消息?
您正在使用预处理器,它在编译器看到程序的原始文本之前运行。所以在这种情况下,所有出现的N
(当N
单独存在时,而不是另一个单词的一部分)都被5
取代。由于预处理器的原因,当程序到达编译器时,它所看到的只是:
void Sort(int *const array, int 5);
这是无效的语法,这就是为什么你得到错误。
C或c++
为#define
使用不同的名称,或者将参数名称更改为任何其他有效的标识符。后者看起来像这样:
#define N 5
void Sort(int *const array, int number);
另一个选择是在函数原型中不使用变量名:
#define N 5
void Sort(int *const, int);
但是你仍然有在实际函数定义中命名它的问题。
请注意,即使只是改变字母的大小写(从N
到n
)也会修复它,但不要这样做,因为它可能会让人看起来模棱两可。
c++
如果你正在使用c++,你不应该使用#define
(尽可能避免使用它,因为它们在很多方面都是不好的)。您应该选择const int
:
const int N = 5;
你可以在任何你可以使用另一个的地方使用这个,而且当人们试图为自己使用那个名字时它不会中断,并且它不会像在C中那样导致多个定义(谢谢Jens)。例如,如果您使用常数而不是#define
:
const int N = 5;
void Sort(int *const array, int N); // works because N is a real variable
您#define
一个宏,它在编译器看到代码之前由预处理器展开。编译器得到:
void Sort(int *const array, int 5);
既然这个问题被标记为c++,我建议停止使用#define
来定义常量:
const int N = 5;
int f(int N); // works
如果你被迫使用预处理器,给你的宏起一个长而难看的名字,以避免名字冲突:
#define YOUR_MEANINGFUL_CONSTANT_NAME_GOES_HERE 5
int f(int N); // works;
您使用N作为宏,#define N 5
和N作为变量名称int N
。这是个坏主意。通常的约定是为宏保留所有大写的名称。所以在这种情况下,我建议将int N
更改为int n
。避免粗心地使用宏,它们恰恰会导致这类问题。但是,如果您确实使用宏,请为它们提供比'N'更有意义的名称,以尽量减少此类错误的发生。
对于VS编译器,你可以这样做:
<>之前#define N 5# ifdef N# pragma push_macro("N")# undef N#定义REDEFINE_N# endifvoid Sort(int *const数组,int N);# ifdef REDEFINE_N# pragma pop_macro("N")# endif- Vector中数字常量之前应为标识符
- 错误:数字常量 #define BOOT_PROTOCOL 0x00 之前的预期'>'
- 使用数字初始化常量引用
- 常量整数变量和数字的不同类型推导
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- 数字常量之前的预期标识符
- 错误:数字常量之前的预期";"、','或 ')
- 构造函数错误:错误:数字常量之前的预期“”,“”或“..”
- 初始化具有递增数字的编译时常量大小的数组
- [错误]数字常量之前的预期标识符.-setlocale
- C++构造函数:数字常量之前的预期标识符
- 数字常量之前的预期';'
- 数字常量之前的预期非限定 id.- 阿杜伊诺
- (C++)错误:在数字常量之前应为非限定id--从文件读取时
- 在数字常量 Arduino 之前应为非限定 id
- 提升数字常量的优点
- 模板中的C++Cygwin数字常量生成错误
- 错误:数字常量之前的预期','或'...'
- 在伪随机生成器中使用常量种子从UT和GUI中获得不相同的数字
- c++编译错误预期的标识符在数字常量之前