所以我在头文件中收到错误。 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”的别名)
答案 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)
由于typeof
是the GCC compiler中的保留字,因此失败,因此您无法将其用作函数的名称。
选择另一个名字,你应该没问题。
另外,在C中使用new
很好,但这是一个C ++关键字,可能会混淆某些环境/编辑器(例如Stack Overflow的语法高亮显示)。
最后,您应该使用strlen()
而不是自己循环,更不用说混淆了。在我看来,缩放sizeof (char)
是愚蠢的,它总是1,但是有些人觉得它增加了一些文件 1 值。
1 这是一个词,因为我刚刚使用它。