为什么我的" C"代码不能在Linux(编译器ggdb3,C99)中编译,但在Visual Studio中工作得很好? 这里有错误消息:
20:1:错误:控制可能会达到非空函数的结束 [-Werror,-Wreturn型] }
#include <stdio.h>
// Function to determine if one character string exists inside another string.
int findString(char source[], char searching[])
{
int i = 0, j = 0;
for (; source[i] != '\0'; i++) {
if (source[i] == searching[j])
if (source[i + 1] == searching[j + 1] &&
source[i + 2] == searching[j + 2])
return i;
else
return -1;
}
}
int main(void)
{
int index = findString("a chatterbox", "hat");
if (index == -1)
printf("No match are founded\n");
else
printf("Match are founded starting index is %i\n", index);
return 0;
}
我试图在这个功能中编辑,但它没有帮助
if (source[0] == '\0')
return -1;
答案 0 :(得分:2)
看起来您实际上只是在收到警告,但是由于您已经为Linux编译器提供了命令行参数-Werror,因此它将警告视为错误。如果查看Visual Studio的编译器输出,您应该会看到类似的警告。
答案 1 :(得分:1)
第一个C不是Python,因此您需要正确使用括号(而不仅仅是缩进)。
那就是说,问题在于你的findString()
功能。如果你正确地放置了一些括号,那么if (source[i] != searching[j])
该函数没有return
语句 - 而它预计会返回int
。
if (source[i] == searching[j])
{
...
}
// what if source[i] != searching[j]
// you do not have any return statement for a function returning int
无法从非void函数返回会导致未定义的行为。
引用C11(由rubenvb撰写)
6.9.1函数定义
12如果到达了终止函数的},并且调用者使用了函数调用的值,则行为是未定义的。
它是more clear与C ++:
[...]离开函数末尾相当于没有值的返回;这导致值返回函数中的未定义行为。[...]