C使用外部函数编译错误

时间:2015-01-28 21:25:38

标签: c

我是C的新手,觉得我好像缺少一些格式化语法,但我无法弄清楚到底是什么。用

编译程序
gcc -o test test.c myprintf.c

我收到以下错误

expected â;â, â,â or â)â before âsâ

我很抱歉,如果这是我的一些简单的忽视,但格式似乎对我来说是正确的。这也是家庭作业的一部分,但我测试了我负责单独创建的每个功能,它们工作得很好。我省略了我负责编写的功能,如果你认为需要它们,我会编辑它们,因为它似乎甚至不能访问它们。错误直接发生在我的第一个和部分函数之间(printint和printstring之间的空行。

最简单的测试文件 - test.c

#include <stdio.h>

extern void myprintf(const char *, ...);

int main()
{
  myprintf("Nothing much\n");

  return 0;
}

myprintf.c

#include <stdarg.h>
#include <stdio.h>


 void printint(int i){
  int temp;
  /*some while loop that shrinks i while outputting the correct char*/

  int ascii = i + '0';
  putchar(ascii);
}

void printstring(char[] s){
  int i = 0;
  /*some while loop that moves through a string using putchar to output the                 corresponding character*/
}

void printhex(int k){
  /*long complicated program involving a series of loops that change a    decimal into a hexidecimal, obviously without using any built in printf or     modifiers*/
}

/*This is the code provided that uses my 3 functions. I assume it all to be correct*/

void myprintf(const char *fmt, ...) {
  const char *p;
  va_list argp;
  int i;
  char *s;

  va_start(argp, fmt);

  for (p = fmt; *p != '\0'; p++) {
    if (*p != '%') {
      putchar(*p);
      continue;
    }
    switch (*++p) {
    case 'c':
      i = va_arg(argp, int);
      putchar(i);
      break;

    case 'd':
      i = va_arg(argp, int);
      printint(i);
      break;

    case 's':
      s = va_arg(argp, char *);
      printstring(s);
      break;

    case 'x':
      i = va_arg(argp, int);
      printhex(i);
      break;

    case '%':
      putchar('%');
      break;
    }
  }
  va_end(argp);
}

2 个答案:

答案 0 :(得分:3)

以下行不正确:

void printstring(char[] s){

将其更改为:

void printstring(char s[]){

答案 1 :(得分:1)

你的专栏:

void printstring(char[] s){

应该是:

void printstring(char s[]){

数组的方括号位于变量名之后,就像在代码中使用s[i]索引它一样。