我是 C 编程的新手,正在尝试解决遇到的一些问题。 当我写
#define N 5
void Sort(int *const array, int N);
编译器给了我消息“在数值常量之前应为‘,’或‘...’”。在网上搜索后发现问题可能是#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);
另一种选择是不在函数原型(prototype)中使用变量名:
#define N 5
void Sort(int *const, int);
但是你在实际的函数定义中仍然有命名的问题。
请注意,即使只是改变字母的大小写(从 N
到 n
)也能修复它,但不要这样做,因为它对某些人来说可能看起来模棱两可.
C++
如果您使用的是 C++,则不应使用 #define
(尽可能避免使用它,因为它们是 bad in myriad ways )。你应该更喜欢 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
关于c++ - 在数字常量之前应为 ',' 或 '...',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7103163/