c++ - 在数字常量之前应为 ',' 或 '...'

标签 c++ c

我是 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);

但是你在实际的函数定义中仍然有命名的问题。

请注意,即使只是改变字母的大小写(从 Nn)也能修复它,但不要这样做,因为它对某些人来说可能看起来模棱两可.


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/

相关文章:

c++ - VC++ - 如何获得在 NTFS 引导扇区上写入的权限?

c++ - 整数到类的映射(模板)

c - 如何通过使用和创建函数来计算命令行参数中的字符数

c++ - C++ 的哪些特性在编译时特别占用资源?

c++ - 有没有办法让函数返回一个类型名?

c++ - 在 Visual Studio 中访问来自多个源文件的变量

c - 将文件中的字符串存储到数组中

c++ - C/C++ Windows 流量拦截器

GCC 可以警告我修改 C99 中 const 结构的字段吗?

c++ - C vs C++ switch 语句变量定义 vs 声明