1

当我编译几个简短的 C 程序时,我遇到了一些错误,我对正在发生的事情感到非常迷茫:

第一个给出这些错误:

Q3.c:在函数âsortâ中:

Q3.c:11:警告:函数“q_sort”的隐式声明

Q3.c:在顶层:

Q3.c:14:警告:âq_sortâ 的类型冲突

Q3.c:11:注意:之前的“q_sort”隐式声明在这里

Q3.c:在函数âmainâ中:

Q3.c:52:警告:函数“malloc”的隐式声明

Q3.c:52:警告:内置函数“malloc”的隐式声明不兼容

Q3.c:56:警告:函数ârandâ的隐式声明

相关代码部分:

void sort(int* number, int n){
 /*Sort the given array number , of length n*/
 q_sort(number, 0, (n - 1));
}

void q_sort(int* numbers, int left, int right)
{
  int pivot, l_hold, r_hold;

  l_hold = left;
  r_hold = right;
  pivot = numbers[left];
  while (left < right)
  {
    while ((numbers[right] >= pivot) && (left < right))
      right--;
    if (left != right)
    {
      numbers[left] = numbers[right];
      left++;
    }
    while ((numbers[left] <= pivot) && (left < right))
      left++;
    if (left != right)
    {
      numbers[right] = numbers[left];
      right--;
    }
  }
  numbers[left] = pivot;
  pivot = left;
  left = l_hold;
  right = r_hold;
  if (left < pivot)
    q_sort(numbers, left, pivot-1);
  if (right > pivot)
    q_sort(numbers, pivot+1, right); 
}

由于我的其他问题程序都使用相同的排序方法,并给出相同的错误,修复这个将解决所有问题。

编辑:一个额外的问题。我在另一个程序上收到此错误

Q5.c:在函数“sticky”中:

Q5.c:29:警告:指针和整数之间的比较

Q5.c:29:警告:与字符串文字比较会导致未指定的行为

在这部分代码中:

void sticky(char* word){
     int i = 0;
     /*Convert to sticky caps*/
     while (word[i] !="\0"){    // line 29
          if (i%2 == 0)
                word[i] = toUpperCase(word[i]);
          else
                word[i] = toLowerCase(word[i]);
          i++;
     }
}
4

4 回答 4

7

交换两个函数的定义......在C语言中,您必须首先声明(或定义)一个函数,并且只有在您可以使用它之后。

对于第二个问题:你必须使用单引号来定义一个字符。

于 2013-07-06T23:54:08.457 回答
2

您还可以在 .c 文件的开头定义它们(可以在您的库之后),然后您可以在任何地方以任何顺序使用它们。

像:

#include <stdio.h>

void sort(int*, int n);
void q_sort(int*, int, int);

...
...
/* Any code */

/* Your sort function */
/* Your q_sort function */

/* Any code*/
于 2013-07-06T23:59:47.140 回答
1

该功能的问题sticky()是您将 achar与 achar*进行比较(word[i] != "\0")

"\0" 不是字符\0,它是指向包含字符的字符串的指针\0。要解决此问题,请(word[i] != '\0')改用。

于 2013-07-07T00:04:21.317 回答
0

除了上面几个答案中所说的之外,我没有什么要补充的。当您编写一个函数并在文件中使用它时,它只是一个 C 基础。

当您使用/校准像“qsort”这样的函数时,您应该始终在程序中的任何位置调用它之前/之上声明它。所以规则是你的程序应该知道你正在调用的函数的原型。在这种情况下,它:

void q_sort(int* numbers, int left, int right);

在你#include所有必要的'.h'文件并定义所有宏之后,通常会在程序文件的顶部提到这个原型。

或者,您也可以选择在调用函数之前在顶部定义函数(完整函数体)本身。

否则编译器会在找不到声明时出现。

于 2013-07-08T13:14:04.740 回答