Connecting Tech Pros Worldwide Forums | Help | Site Map

Why do I have to prefix stat from <sys/stat.h> with the keyword struct?

Rolf =?UTF-8?B?S3LDvGdlcg==?=
Guest
 
Posts: n/a
#1: Mar 12 '08
Hi


I´m about learning C/C++ and after covering the language basics I´m now
heading for my first "real" application where I need to use the POSIX stuff
for directory operations.

Here´s my problem: The following code compiles and runs as it should inside
a linux g++ environment using code::blocks IDE. But when I drop
the "struct" prefix from line 12 "struct stat st;" It doesn´t compile any
more and it says:

|12|error: expected `;' before ‘st’
|12|warning: statement is a reference, not call, to function ‘stat’
|12|warning: statement has no effect
|18|error: ‘st’ was not declared in this scope

Hmm, what´s going on here? Why can I drop "struct" from line 1? IMHO dirent
is just a struct as stat is. A similar behaviour can be found using the
cygwin environment under windows, so I guess it has nothing to do with
system dependent header files.


Any ideas?
Thanx in advance
Rolf



#include <iostream>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>

using namespace std;

int main() {

dirent *entry;
struct stat st;

DIR *base;
base = opendir(".");

while( (entry = readdir(base)) != 0) {
stat(entry->d_name, &st);
cout << entry->d_name << " :: " << st.st_mode << endl;
}

closedir(base);

return 0;
}


Ian Collins
Guest
 
Posts: n/a
#2: Mar 12 '08

re: Why do I have to prefix stat from <sys/stat.h> with the keyword struct?


Rolf Krüger wrote:
Quote:
Hi
>
>
I´m about learning C/C++ and after covering the language basics I´m now
heading for my first "real" application where I need to use the POSIX stuff
for directory operations.
>
Here´s my problem: The following code compiles and runs as it should inside
a linux g++ environment using code::blocks IDE. But when I drop
the "struct" prefix from line 12 "struct stat st;" It doesn´t compile any
more and it says:
>
|12|error: expected `;' before ‘st’
|12|warning: statement is a reference, not call, to function ‘stat’
|12|warning: statement has no effect
|18|error: ‘st’ was not declared in this scope
>
stat is both a struct and a function. Very confusing, but simple to
disambiguate with 'struct stat'.

--
Ian Collins.
Rolf =?UTF-8?B?S3LDvGdlcg==?=
Guest
 
Posts: n/a
#3: Mar 12 '08

re: Why do I have to prefix stat from <sys/stat.h> with the keyword struct?


Hi Ian,
Quote:
Quote:
>Here´s my problem: The following code compiles and runs as it should
>inside a linux g++ environment using code::blocks IDE. But when I drop
>the "struct" prefix from line 12 "struct stat st;" It doesn´t compile any
>more and it says:
>>
>|12|error: expected `;' before ‘st’
>|12|warning: statement is a reference, not call, to function ‘stat’
>|12|warning: statement has no effect
>|18|error: ‘st’ was not declared in this scope
Quote:
stat is both a struct and a function. Very confusing, but simple to
disambiguate with 'struct stat'.
Thank you very much

I´ve taken more than one close look into the sys/stat.h file ... obviously
not enough - should have seen this by myself!

Thanks
Rolf



Closed Thread