2015-07-13 93 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

相關問題