在标题中声明枚举,在源文件中不可见?

时间:2012-02-20 11:06:34

标签: c dll enums header shared-libraries

在源文件(来自共享对象/ DLL)中,我得到OKAY could not be resolved,虽然它在标题中。标题是在另一个项目中,但我不认为这应该是相关的,因为ppackage正确解决了?

更新,此处为来源:

从建筑物项目中构建输出。

make all 
Building file: ../src/foor.c
Invoking: GCC C Compiler
gcc -I"/home/lk/proj/m5/m5/src/include" -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/foor.d" -MT"src/foor.d" -o "src/foor.o" "../src/foor.c"
In file included from ../src/foor.c:9:0:
/home/lk/proj/m5/m5/src/include/m5.h:33:3: warning: #warning ohshit
../src/foor.c:12:1: warning: missing braces around initializer
../src/foor.c:12:1: warning: (near initialization for 'fs[1]')
Finished building: ../src/foor.c

Building target: libfoor.so
Invoking: GCC C Linker
gcc -shared -o "libfoor.so"  ./src/foor.o   
Finished building target: libfoor.so

头:

#include <stdio.h>

enum {
    OKAY = 0,
    ERR,
    ERRANY,
    // list shortened
    ERRNOTFOUND,
};

typedef struct { ..foobars.. } ppackage;

源文件:

#include <header.h> // Did add -I ../include, where the header is

ppackage knock(ppackage *in)
{
    return OKAY; // ERROR
}

2 个答案:

答案 0 :(得分:2)

如果包含标题,则该标题中的所有代码也可以在#include指令所在的位置粘贴到C源文件中。

听起来很奇怪,它不起作用。

要做的一件事就是使用引号而不是尖括号来包含,因为你要包含第三方标题。

另外,请包含确切的编译器输出。

答案 1 :(得分:0)

目前尚不清楚,你的枚举与..foobars有关..

Ppackage knock(ppackage * in)应该有一个ppackage类型的返回值,它是一个struct {.foobars ..}

确实

   typedef enum {
    OKAY = 0,
    ERR,
    ERRANY,
    // list shortened
    ERRNOTFOUND,
   } preturnvalue_t;

带有功能

   preturnvalue_t knock(ppackage *in)
   { 
      return OKAY; // ERROR
   }

做你需要的吗?

鲁兹