2010-06-09 180 views
3

我正在使用ubuntu系統。我的目標是基本上使用TCL/TK的GUI工具製作C語言IDE。我安裝了tcl 8.4,tk8.4,tcl8.4-dev,tk8.4-dev,並在我的系統中安裝了tk.h和tcl.h頭文件。但是,當我運行一個基本的Hello World程序時,它顯示了很多錯誤。在c程序中包含tk.h和tcl.h

#include "tk.h" 
#include "stdio.h" 
void hello() { 
    puts("Hello C++/Tk!"); 
} 
int main(int, char *argv[]) 
{  init(argv[0]); 
    button(".b") -text("Say Hello") -command(hello); 
    pack(".b") -padx(20) -pady(6); 
} 

有些錯誤是

tkDecls.h:644: error: expected declaration specifiers before ‘EXTERN’ 

/usr/include/libio.h:488: error: expected ‘)’ before ‘*’ token 

In file included from tk.h:1559, 
       from new1.c:1: 
tkDecls.h:1196: error: storage class specified for parameter ‘TkStubs’ 
tkDecls.h:1201: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 

/usr/include/stdio.h:145: error: storage class specified for parameter ‘stdin’ 

tk.h:1273: error: declaration for parameter ‘Tk_PhotoHandle’ but no such parameter 

誰能告訴我怎樣才能糾正這些錯誤?請幫助...

+4

顯示一些選定的錯誤沒有意義。幾乎總是,只有編譯器的第一個錯誤纔是信息性的,因爲所有其他錯誤都是後續錯誤。大多數情況下,第一個錯誤非常清楚地說明出了什麼問題。那麼REAL輸出是什麼? – 2010-06-09 06:24:05

+0

tcl完全可以從'c'調用 - 這可能是您的設置中的錯誤。你使用的是什麼操作系統和編譯器? – 2011-02-21 18:42:03

+0

C或C++?選一個。 – 2015-12-22 17:46:36

回答

0

但是......你不應該使用<>系統範圍包括?!並且button("..") -text("...") ..不是很好的C語法,除非tk.h給出了強大的宏button-text(這是有問題的,即不可能),並且我懷疑它不是這樣(事實上並非如此)...

您可能對this感興趣,並且還可以閱讀this並進行挖掘是值得的; (也許更有趣),例如, this

+0

我懷疑直接使用Tk lib來構建一個接口比預期的要複雜 – ShinTakezou 2010-06-09 07:51:25

+0

非常感謝鏈接......我已經分配了這個任務並且必須完成它。再次感謝 – user362075 2010-06-11 16:28:46

4

這根本不是一個有效的程序。你試圖做的是將Tcl和Tk嵌入你的C應用程序中。閱讀Tcl/Tk書中的相關章節或研究Tcl Wiki(例如1)。

要運行Tcl或Tk命令,您必須正確初始化一個Tcl_Interp。所以至少你必須初始化Tcl庫並創建一個解釋器。然後,對於Tk,您需要初始化該庫並運行事件循環。 Tcl_AppInit的文檔討論了這個問題以及Tcl源代碼中的tclAppInit.c文件(或Tk中的tkAppInit.c)向您展示瞭如何設置您的應用程序。通常,您可以使用提供的tkAppInit文件作爲'main',並將您的自定義應用程序初始化放入由Tcl或Tk主函數調用的Tcl_AppInit函數中。

從C調用Tk函數是不好的建議。定義腳本並在Tcl中寫入Tk位。即使Tk本身也使用Tcl腳本創建標準對話框(從library/*.tcl)。

+1

+1嵌入tcl解釋器並不意味着你可以用c寫入tcl inline – 2011-02-25 09:16:06