似乎是有效的C,但有错误:“预期的标识符或'('”

时间:2016-11-03 10:20:06

标签: c macos gcc

所以我在头文件中收到错误。 gcc告诉我错误在下一行的't'处。

char* typeof(char*);

相应的.c文件中的相应代码如下。

char* typeof(char* word) {
  int q = -1;
  do {
    char c = word[++q];
  } while (c);
  char* new = !q ? 0 : malloc(sizeof(char) * q);
  while (q > 0) {
    new[--q] = word[q] >= 'A' && word[q] <= 'Z' ? word[q] - 'A' : word[q] - 'a';
  }
  return new;
}

你们还需要知道哪些其他信息?

我正在使用Mac,在终端内使用vim编写此代码,并使用Mac的gcc进行编译。

fvfs-MacBook-Pro:src fvf$ which vi
/usr/bin/vi
fvfs-MacBook-Pro:src fvf$ ll /usr/bin/vi
lrwxr-xr-x  1 root  wheel  3 Oct  5 11:33 /usr/bin/vi@ -> vim
fvfs-MacBook-Pro:src fvf$ ll /usr/bin/vim
-rwxr-xr-x  1 root  wheel  1745984 Oct 19 05:38 /usr/bin/vim*
fvfs-MacBook-Pro:src fvf$ which gcc
/usr/bin/gcc
fvfs-MacBook-Pro:src fvf$ ll /usr/bin/gcc
-rwxr-xr-x  1 root  wheel  18240 Oct 19 05:11 /usr/bin/gcc*

(命令行中的“ll”是“ls -l”的别名)

My IDE did not tell me it was a reserved word.

2 个答案:

答案 0 :(得分:1)

错误的直接原因(带有可怕的错误消息)是您使用了保留字(typeof)作为您的函数名称。

此错误掩盖了另外两个:

do {
  char c = word[++q];
} while (c);

c不在此while范围内。

char* new = !q ? 0 : malloc(sizeof(char) * q);

sizeof(char)始终为1,因此是多余的,并且您没有检查malloc的错误返回值。

答案 1 :(得分:0)

由于typeofthe GCC compiler中的保留字,因此失败,因此您无法将其用作函数的名称。

选择另一个名字,你应该没问题。

另外,在C中使用new很好,但这是一个C ++关键字,可能会混淆某些环境/编辑器(例如Stack Overflow的语法高亮显示)。

最后,您应该使用strlen()而不是自己循环,更不用说混淆了。在我看来,缩放sizeof (char)是愚蠢的,它总是1,但是有些人觉得它增加了一些文件 1 值。

1 这是一个词,因为我刚刚使用它。