2015-07-13 95 views
2

在我的C文件,我打电话是在生成的文件中定义的函数,lex.yy.c如果我不关心返回值,我应该声明什么返回类型?

yy_scan_string(input); 

被宣布为继lex.yy.c

YY_BUFFER_STATE yy_scan_string(yyconst char *yystr); 

而反过来YY_BUFFER_STATEtypedef

typedef struct yy_buffer_state *YY_BUFFER_STATE; 

这些都不适用于包括e来自头文件。虽然为了拨打yy_scan_string我必须先申报。

当我不关心返回值时,在我的源文件中声明这个函数的最佳方式是什么,并且包含返回类型的类型定义是不可行的?

回答

2

普遍接受的方法是定义在头文件的功能,包括你把它叫做文件的启动文件从。

如果由于某种原因,没有提供头文件,你会做到这一点。

如果只有少数函数可以在.c文件中本地声明它们。

该函数返回一个指针结构,所以你可以使用前置声明:

typedef struct yy_buffer_state *YY_BUFFER_STATE; 

但是我只能建议非常强烈,你删除那些声明自己的文件。

-4

只是要它的类型void

例如:

#include <stdio.h> 
void helloworld(); 

void main() 
{ 
    helloworld(); 
} 

void helloworld() 
{ 
    printf("Hello World"); 
} 
+2

uff ....不再...离开'main()'..为你的例子输入任何其他函数... –

+0

好吧。等待编辑。 –

4

将它声明为您已如何描述,但将结构定义为不透明类型。只要你不取消引用返回值(听起来你不会),那么这将工作得很好。

struct yy_buffer_state; 
typedef struct yy_buffer_state *YY_BUFFER_STATE; 
YY_BUFFER_STATE yy_scan_string(yyconst char *yystr); 
+0

这里需要不透明的结构声明吗?如果我省略第一行,gcc不会给出任何警告/错误。 –

+0

@RyanLi第二行隐式转发声明'struct yy_buffer_state',因此您指出第一行不是必需的。 – Persixty

相关问题