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

R

Rolf Krüger

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;
}
 
R

Rolf Krüger

Hi Ian,
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
 
I

Ian Collins

Rolf said:
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'.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,828
Latest member
LauraCastr

Latest Threads

Top