Question: 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...

Answer: 
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](http://wiki.tcl.tk/2074 "Embedding Tcl in C applications")).

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`).
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](http://www.hwaci.com/sw/et/doc/ET0002.html), and also a reading to [this](http://wiki.tcl.tk/3474) and digging around is worth; and also (more interesting for you maybe), read e.g. [this](http://fringe.davesource.com/Fringe/Computers/Languages/tcl_tk/tcl_C.html)