09-10-2013
Thanks. Your explanation and example makes it more clear (also thanks for pointing out it may not be best praxis, but for now i just try to understand the general idea).
I think you say that: header files are (or can be ) used _instead of declaring the variable foo as extern in File2 and File3. foo is defined in File1 (and storage is set aside for it). File1 includes myheader.h too, and if foo is declared (File2 and File3) or defined (File1) is decided by the #ifndef Mainfile and #define Mainfile in File1.
I read in §The C Programming langauge"; (As "C A modern approach" was not clear on the subject) and in chapter 1 "External variables and scope" (page 33 for me) it says the following (or that is what i understand):
- a definition creates a variable and sets aside storage
- a declaration only announces the nature of a variable
- extern says that the definition is elsewhere and only declares
- header files include declarations, not definitions
Is both correct (What i understood of your post and what i understood of the book)?
I think i am getting closer to understand it. Let me rethink and read again.Really thanks.
10 More Discussions You Might Find Interesting
1. Programming
Hi,
Please let me know if the extern keyword is necessary for using functions which is defined and declared in another file and and used in a different file where both these files are linked together.
thanks (8 Replies)
Discussion started by: naan
8 Replies
2. Linux
say i have these many file in a directory named exam.
1)/exam/newfolder/link.txt.
2)/exam/newfolder1/
and i create a tar say exam.tar
well the problem is,
when i read the tar file i dont find any metadata about the directories,as you cannot create a tar containig empty directories.
on the... (2 Replies)
Discussion started by: Tanvirk
2 Replies
3. Programming
file1.c
int a1;
int main()
{
a1 = 2;
printf("\na1 = %d\n", a1);
next();
printf("\na1 = %d\n", a1);
next1();
printf("\na1 = %d\n", a1);
}
file2.c
#include <stdio.h>
int b1 = 0;
void next(void) (1 Reply)
Discussion started by: Tanvirk
1 Replies
4. Linux
Hi there, I'm having a bit of a strange problem which I would appreciate some help with.
The Problem:
I have two external hard drives, but I'm borrowing one off my parents to copy data too (one of mine, which is identical to theirs - WD MyBook 300g - is on its way out).
Fedora 9 recognizes... (3 Replies)
Discussion started by: lasthidingplace
3 Replies
5. UNIX for Dummies Questions & Answers
Hi,
I'm searching for an solution for the following problem.
I want fetch some mails via pop3 from a@a.com with fetchmail.
That works perfectly. Now any incoming mail should forwarded to b@b.com via smtp obv. But I don't know how to configure that. All online tutorials describe forwarding to... (0 Replies)
Discussion started by: mcW
0 Replies
6. Programming
Why this is happening when both of them compiled together and run?
I am getting segmentation fault SIGSEGV.
File1.c:
int arr;
File2.c:
extern int *arr;
int main() {
arr = 100;
} (3 Replies)
Discussion started by: royalibrahim
3 Replies
7. Shell Programming and Scripting
Hi Experts,
In our project we have requirement where in we have to compare header of one file with header in the parameter file.
There are 20 files which we ftp from one site. All this files have different header.
We are comapring this file with our parameter file(which is having the header... (2 Replies)
Discussion started by: Amey Joshi
2 Replies
8. UNIX for Dummies Questions & Answers
Friends,
I need help with the following in UNIX.
Merge all csv files in one folder considering only 1 header row and ignoring header of all other files.
FYI - All files are in same format and contains same headers.
Thank you (4 Replies)
Discussion started by: Shiny_Roy
4 Replies
9. Programming
I saw a header (.h) file with mixture of "regular" function declarations and other extern function declarations. As I was told all function declarations are implicitly external and the extern on functions declarations is superfluous. Here my focus is on function declaration, not variable yet.
int... (2 Replies)
Discussion started by: yifangt
2 Replies
10. Shell Programming and Scripting
I've been struggling with this one for quite a while and cannot seem to find a solution for this find/replace scenario. Perhaps I'm getting rusty.
I have a file that contains a number of metrics (exactly 3 fields per line) from a few appliances that are collected in parallel. To identify the... (3 Replies)
Discussion started by: verdepollo
3 Replies
scope(n) [incr Tcl] scope(n)
__________________________________________________________________________________________________________________________________________________
NAME
scope - capture the namespace context for a variable
SYNOPSIS
itcl::scope name
_________________________________________________________________
DESCRIPTION
Creates a scoped value for the specified name, which must be a variable name. If the name is an instance variable, then the scope command
returns a string of the following form:
@itcl object varName
This is recognized in any context as an instance variable belonging to object. So with itcl3.0 and beyond, it is possible to use instance
variables in conjunction with widgets. For example, if you have an object with a private variable x, and you can use x in conjunction with
the -textvariable option of an entry widget. Before itcl3.0, only common variables could be used in this manner.
If the name is not an instance variable, then it must be a common variable or a global variable. In that case, the scope command returns
the fully qualified name of the variable, e.g., ::foo::bar::x.
If the name is not recognized as a variable, the scope command returns an error.
Ordinary variable names refer to variables in the global namespace. A scoped value captures a variable name together with its namespace
context in a way that allows it to be referenced properly later. It is needed, for example, to wrap up variable names when a Tk widget is
used within a namespace:
namespace foo {
private variable mode 1
radiobutton .rb1 -text "Mode #1" -variable [scope mode] -value 1
pack .rb1
radiobutton .rb2 -text "Mode #2" -variable [scope mode] -value 2
pack .rb2
}
Radiobuttons .rb1 and .rb2 interact via the variable "mode" contained in the namespace "foo". The scope command guarantees this by return-
ing the fully qualified variable name ::foo::mode.
You should never use the @itcl syntax directly. For example, it is a bad idea to write code like this:
set {@itcl ::fred x} 3
puts "value = ${@itcl ::fred x}"
Instead, you should always use the scope command to generate the variable name dynamically. Then, you can pass that name to a widget or to
any other bit of code in your program.
KEYWORDS
code, namespace, variable
itcl scope(n)