Statalist The Stata Listserver


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: creating an (external) global variable containing a structure


From   Phil Schumm <pschumm@uchicago.edu>
To   statalist@hsphsun2.harvard.edu
Subject   st: creating an (external) global variable containing a structure
Date   Thu, 25 May 2006 12:50:34 -0500

Suppose I want to create a global variable containing a structure from within a function. For example:


struct mystruct {
real scalar a
}

void create_mystruct()
{
external struct mystruct scalar foo
}


I would have assumed that after calling create_mystruct(), foo would contain a struct scalar, just as though I had used the constructor mystruct(). Instead, however, it contains a (NULL) pointer scalar:


. mata: create_mystruct()

. mata: mata describe

# bytes type name and extent
------------------------------------------------------------------------ -------
52 void create_mystruct()
68 structdef scalar mystruct()
8 pointer scalar foo
------------------------------------------------------------------------ -------

. mata: foo
0x0


This puzzled me, because it seems a bit inconsistent with the way external declarations work for other types. Moreover, I'm not sure what the resulting object is intended to be used for. For example, the following will not compile:


void create_mystruct()
{
external struct mystruct scalar foo
struct mystruct scalar foobar
foobar = mystruct()
foo = &foobar // this line yields a type mismatch error
}


which demonstrates that the line

external struct mystruct scalar foo

does not yield the same result as

external pointer(struct mystruct scalar) scalar foo

does, even though they both create pointer scalars. So, I guess I really have a two-part question: First, how does the compiler interpret the original declaration of foo, and, how should one create an (external) global variable containing a structure from within a function?


-- Phil

*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/




© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index