在c程序中包括tk.h和tcl.h

发布于 2024-09-05 06:09:25 字数 1008 浏览 5 评论 0 原文

我正在开发 ubuntu 系统。我的目标基本上是使用 TCL/TK 的 GUI 工具用 C 语言制作一个 IDE。我安装了 tcl 8.4、tk8.4、tcl8.4-dev、tk8.4-dev,并且系统中有 tk.h 和 tcl.h 头文件。但是,当我运行一个基本的 hello world 程序时,它显示了很多错误。

#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

有人可以告诉我如何纠正这些错误吗?请帮忙...

i am working on an ubuntu system. My aim is to basically make an IDE in C language using GUI tools from TCL/TK. I installed tcl 8.4, tk8.4, tcl8.4-dev, tk8.4-dev and have the tk.h and tcl.h headers file in my system. But, when I am running a basic hello world program it's showing a hell lot of errors.

#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);
}

Some of the errors are

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

Can anyone please tell me how can I rectify these errors? Please help...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一杯敬自由 2024-09-12 06:09:25

这根本不是一个有效的程序。您尝试做的是将 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)创建标准对话框等。

This is not a valid program at all. What you are attempting to do is embed Tcl and Tk into your C application. Read the relevant sections in a Tcl/Tk book or research the Tcl Wiki (for instance 1).

To run Tcl or Tk commands you must have a Tcl_Interp properly initialized. So at minimum you must initialize the Tcl library and create an interpreter. Then for Tk you will need to initialize that library and run an event loop. The documentation for Tcl_AppInit discusses this and the tclAppInit.c file in the Tcl source (or tkAppInit.c in Tk) show you how to setup your app. Typically you would use the provided tkAppInit file as 'main' and put your custom application initialization into a Tcl_AppInit function that is called from the Tcl or Tk main function.

Calling Tk functions from C is ill advised. Define scripts and write the Tk bits in Tcl. Even Tk itself creates standard dialogs and such using Tcl scripts (from library/*.tcl).

清泪尽 2024-09-12 06:09:25

但是...您不应该使用 <> 进行系统范围的包含吗?!和 button("..") -text("...") .. 不是好的 C 语法,除非 tk.h 提供强大的宏 button 和 < code>-text (这是有问题的,即不可能),我怀疑事实并非如此(事实上并非如此)...

您可能对 ,以及对

but... shouldn't you use <> for systemwide include?! and button("..") -text("...") .. isn't good C grammar, unless tk.h gives powerful macros button and -text (which is problematic, i.e., not possible), and I suspect it is not so (in fact it is not so)...

You could be interested in this, and also a reading to this and digging around is worth; and also (more interesting for you maybe), read e.g. this

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文