C中的VS代码问题建议

VS code problems suggestion in C

我正在为学校编写硬件,我应该在其中实现 circular buffer 和 运行 两件事。 VS Code 说:

  1. 函数调用中的参数太少 [8,21]
  2. 需要';' [9,5]

但我很确定,到目前为止我没有犯任何错误。我也不知道如何编译它,GCC 不会接受。 Makefile 学校提供的错误,但是 none 关于这个问题。

我有 C/C++ Microsoft [v1.2.2] 的扩展。 errors/problems 是由那个人处理的吗?

代码如下queue.c:

#include "queue.h"

// TODO - your code
queue_t* create_queue(int capacity){
    queue_t * q;
    q->capacity = capacity;
    q->count = 0;
    q->arr = malloc(capacity*sizeof(int));
    if(q->arr == NULL){
        fprintf(stderr, "ERROR: cannot alocate enough memory!\n"); // here is the er#1
    }
    q->arr_end =(int*)q->arr + capacity * sizeof(int);
    return q; // er#2 occurs here
}

这里queue.h

#ifndef __QUEUE_H__
#define __QUEUE_H__

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

/* Queue structure which holds all necessary data */
typedef struct {
   // TODO - Include your data structure here
   int capacity; // the max # of elemetns, that can be stored
   int count; // # of elements in Q
   int * arr; // the array itself
   int * arr_end; // pointer to the end of arr (ie: *(arr+int*len))
   int * read; // position to read from; ie: HEAD
   int * write; // position to write form; ie: TAIL
} queue_t;

/* creates a new queue with a given size */
queue_t* create_queue(int capacity);

// ... 

#endif /* __QUEUE_H__ */

gcc queue.c

的 GCC 输出
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status

这是学校的 main.c

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#include "queue.h"

/* allocate new integer with value a and add it to the queue */
void add(int a, queue_t *queue)
{
   int *p = (int*)malloc(sizeof(int));
   *p = a;
   bool ret = push_to_queue(queue, (void*)p);
   if (!ret) {
      // free memory on failure
      free(p);
   }
}

/* print the int value on pointer p */
void print_int(void *p)
{
   if (p != NULL) {
      printf("%d\n", *((int*)p));
   } else {
      printf("NULL\n");
   }
}

/* pop from the queue, print and free the element */
void pop(queue_t *queue)
{
   void *p = pop_from_queue(queue);
   print_int(p);
   free(p);
}

/* get i-th element and print it (do not remove them) */
void get(int idx, queue_t *queue)
{
   print_int(get_from_queue(queue, idx));
}

/*
 * TEST PROGRAM
 * - reads commands from stdin and executes them in the queue
 */
int main(int argc, char *argv[])
{
   int n;
   /* the tested queue */
   queue_t *queue;

   // read the size of the queue
   scanf("%d", &n);
   // create queue
   queue = create_queue(n);

   while (true) {
      char s[2];
      // read one command
      int ret = scanf("%1s", s);
      if (ret != 1) {
         break;
      }

      // add command
      if (s[0] == 'a') {
         int a;
         // read the argument of the command
         ret = scanf("%d", &a);
         if (ret != 1) {
            break;
         }
         add(a, queue);
         // remove command
      } else if (s[0] == 'r') {
         pop(queue);
         // get command
      } else if (s[0] == 'g') {
         int a;
         // read the argument of the command
         ret = scanf("%d", &a);
         if (ret != 1) {
            break;
         }
         get(a, queue);
      }
   }

   // remove rest of the elements in the queue
   while (get_queue_size(queue)) {
      void *p = pop_from_queue(queue);
      free(p);
   }

   // free memory
   delete_queue(queue);
   queue = NULL;

   // return 0 on succes
   return 0;
}

您忘记为队列保留 space:

queue_t * q = malloc(sizeof *q);

if (q != NULL)
{
    q->capacity = capacity;
    ...

还有

q->arr_end =(int*)q->arr + capacity * sizeof(int);

在这里你想要(假设你想要一个指向最后一个元素的指针):

q->arr_end = q->arr + capacity - 1;

指针运算是根据元素(而不是字节)完成的

关于你的编译错误,你似乎忘记包含包含main的单元,用

试试
gcc main.c queue.c