我正在尝试检测错误,因此我在程序中包含了一些痕迹。 问题是,在那之后,它不会编译,给我下一个错误:
../src/DR700_API.c:46: parse error before `*'
我刚在每个函数的开头添加了一个fprintf:
fprintf(stdout,"_name_of_function_");
评论所有fprintf它编译正确,所以有错误。我无法免除它们,因为我想跟踪执行时间中的其他错误。
这是一个小例子:
#include <stdio.h>
#include <stdlib.h>
ImprFunc *DR700_new()
{
fprintf(stdout,"DR700_new");
ImprFunc *impr = (ImprFunc *)malloc(sizeof(DR700_ImprFunc));
if (impr == NULL)
return NULL;
...
../src/DR700_API.c:46: parse error before `*'
../src/DR700_API.c:47: `impr' undeclared (first use in this function)
../src/DR700_API.c:47: (Each undeclared identifier is reported only once
../src/DR700_API.c:47: for each function it appears in.)
make: *** [../obj/DR700_API.o] Error 1
答案 0 :(得分:2)
可能您的设置不允许混合代码和声明(根据C89)。如果您不希望影响项目设置 - 尝试在任何代码之前保留声明。在你的例子中,它意味着
ImprFunc *impr = (ImprFunc *)malloc(sizeof(DR700_ImprFunc));
fprintf(stdout,"DR700_new");
而不是
fprintf(stdout,"DR700_new");
ImprFunc *impr = (ImprFunc *)malloc(sizeof(DR700_ImprFunc));
或者 - 添加-std=c99
(如评论中所述)。
答案 1 :(得分:2)
在C的早期版本中,必须在块的开头声明变量。
C99允许任意混合声明和语句(例如,请参阅Variable declaration placement in C和Where can I legally declare a variable in C99?)。
您可以尝试使用--std=c99
/ --std=c11
进行编译,这样您就可以在任何地方声明变量(如果您的gcc版本支持。请参阅Status of C99 features in GCC和C11Status)。
C99在很大程度上与C89向后兼容。