我是C编程的新手,并试图找出遇到的一些问题.我写的时候
#define N 5
void Sort(int *const array, int N);
Run Code Online (Sandbox Code Playgroud)
编译器在数字const之前给了我"预期','或'...'的消息".在互联网上搜索后发现问题可能被#define调试为数值.我确实没有使用#define作为常量N来完成编译器.但是,我想知道我应该如何修改上面两行以便我不会收到错误消息?
Set*_*gie 12
你正在使用预编译器,它在编译器看到它之前在程序的原始文本上运行.因此,在这种情况下,所有出现的N(当N它本身不是另一个词的一部分时)被替换为5.当程序到达编译器时,由于预处理器,它看到的只是:
void Sort(int *const array, int 5);
Run Code Online (Sandbox Code Playgroud)
这是无效的语法,这就是你得到错误的原因.
要么使用其他名称#define,要么将参数名称更改为任何其他有效标识符.后者看起来像这样:
#define N 5
void Sort(int *const array, int number);
Run Code Online (Sandbox Code Playgroud)
另一个选择是不在函数原型中使用变量名:
#define N 5
void Sort(int *const, int);
Run Code Online (Sandbox Code Playgroud)
但是你仍然有在实际的函数定义中命名它的问题.
请注意,即使只是更改字母的大小写(从N到n)也会修复它,但不要这样做,因为它可能看起来对某人不明确.
如果您使用的是C++,则不应该使用#define(尽可能避免使用它,因为它们在各种方面都很糟糕 ).你应该更喜欢: const int
const int N = 5;
Run Code Online (Sandbox Code Playgroud)
您可以在任何可以使用另一个的地方使用它,而且当人们尝试为自己使用该名称时它不会破坏,并且它不会导致像C中那样的多个定义(感谢Jens).例如,如果您使用常量而不是#define:您的原始代码将起作用:
const int N = 5;
void Sort(int *const array, int N); // works because N is a real variable
Run Code Online (Sandbox Code Playgroud)