c-Cmake:导致不存在的错误



在我的C项目中,我有4-5个文件。首先,我通过在include部分直接包含源文件来测试它们。我用了代码块,我的程序运行得非常好。

但当我尝试使用Cmake构建项目时,问题来了。我将项目的生成器指定为CCD_ 1;Use default native compiler";。配置和生成完成。

当我使用命令mingw32-make运行时,我得到错误

error: too few arguments to function 'strnlen'
int len=strnlen(buf);

我已包含字符串。h仍然存在错误。当我直接在代码块中运行时,这些错误从未出现过。我尝试将编译器更改为代码块文件夹中的编译器。没有用。有什么建议吗,比如我应该让哪个编译器工作?Idk,其中代码块默认编译器位置为.

这与cmake或代码块无关。您的代码错误。strnlen需要两个参数。之前编译过的代码(如果你运行它的话可能会崩溃(,只是因为在C中你可以做一些愚蠢的事情,比如使用一个从未声明过的函数;有益的";(不是!(为您声明函数。

因此,在进行编译的代码中,编译器";有益的";添加了一个隐式声明,如下所示:

int strnlen(...);
// in C this means exactly the same as
int strnlen(); // a function returning int and taking any number of arguments (!)

问题是,这不是这个函数的正确定义,程序有未定义的行为,可能会崩溃,或者它看起来可以工作,并在你最意想不到的时候崩溃(通常是在演示期间,或者如果这是家庭作业,它对你的教授不起作用(。

您需要弄清楚该特定函数要使用什么标头才能可用。在Linux和Windows上,它将是string.h,但在Windows上并不总是存在(例如,一些编译器可能不会在其头文件或运行库中提供该函数(。

最新更新