Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2013, 15:47   #1
Agrooo
Новичок
Джуниор
 
Регистрация: 20.05.2013
Сообщений: 4
По умолчанию Использование структуры stat

Пытаюсь сделать программу для работы с файлами, начал с того, что бы она определяла размер файла, путем гугления нашел кусок кода, работает, но я не могу понять что там происходит. Объясните, пожалуйста!
Код:
long filesize = 0;
struct stat st;

stat(argv[1], &st);
filesize = st.st_size;
Почему нужно писать именно "struct stat st" а "не stat st"? При объявлении объекта класса же вроде не нужно писать class такой-то?
Почему приходится писать "stat(argv[1], &st)", если stat это структура? А тут она получается как функция... Что происходит?
Agrooo вне форума Ответить с цитированием
Старый 20.05.2013, 16:03   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

struct stat st; это синтаксис С. В С++ можно написать просто "stat st"
Насчет совпадения имен не в курсе.
waleri вне форума Ответить с цитированием
Старый 20.05.2013, 16:04   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Почему нужно писать именно "struct stat st" а "не stat st"? При объявлении объекта класса же вроде не нужно писать class такой-то?
Почему приходится писать "stat(argv[1], &st)", если stat это структура? А тут она получается как функция... Что происходит?
Это код на языке программирования Си (не путать с Си++). В нём ключевого слова class нет вообще, а переменные-структуры необходимо объявлять с использованием ключевого слова struct.
Наконец, stat(const char*, struct stat*) - это функция. Которую какой-то интересный человек назвал так же, как и структуру.
Abstraction вне форума Ответить с цитированием
Старый 20.05.2013, 16:34   #4
Agrooo
Новичок
Джуниор
 
Регистрация: 20.05.2013
Сообщений: 4
По умолчанию

Странно... Работаю-то в Microsoft Visual C++ Express 2010. Именно С++. А "stat st" все равно не компилится.
Тем не менее, спасибо за ответы!
Agrooo вне форума Ответить с цитированием
Старый 20.05.2013, 16:49   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Agrooo
расширение исходного файла какое?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.05.2013, 17:25   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Agrooo Посмотреть сообщение
Странно... Работаю-то в Microsoft Visual C++ Express 2010. Именно С++. А "stat st" все равно не компилится.
Попробуйте _stat
waleri вне форума Ответить с цитированием
Старый 21.05.2013, 09:31   #7
Agrooo
Новичок
Джуниор
 
Регистрация: 20.05.2013
Сообщений: 4
По умолчанию

pproger *.cpp.
cout работает, его же в Си нету по моему?
Agrooo вне форума Ответить с цитированием
Старый 21.05.2013, 11:32   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
cout работает, его же в Си нету по моему?
Да.

stat st и не будет компилироваться, если правильно понимаю - компилятор будет воспринимать stat как имя функции. Разумеется, если бы Вы предоставили текст ошибки, возможно, у кого-нибудь получилось бы сказать точнее.
Abstraction вне форума Ответить с цитированием
Старый 22.05.2013, 13:41   #9
Agrooo
Новичок
Джуниор
 
Регистрация: 20.05.2013
Сообщений: 4
По умолчанию

Вот весь невеликий код:
Код:
//mg.cpp

#include "mg.h"

int _tmain(int argc, _TCHAR* argv[])
{	
	long filesize = 0;
	struct stat st;

	stat(argv[1], &st);
	filesize = st.st_size;
	cout << endl << setbase(10) << filesize;

	return 0;
}
Код:
//mg.h

#include <tchar.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <iomanip>
#include <sys\stat.h>
#include <sys\types.h>

using namespace std;
Если сделать stat st то выдает несколько ошибок, первая из которых
Цитата:
error C2146: syntax error : missing ';' before identifier 'st'
Функция разве может быть вызвана без скобок?
Agrooo вне форума Ответить с цитированием
Старый 22.05.2013, 17:15   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Функция разве может быть вызвана без скобок?
Вызвана - не может. Названа - может. Имя функции - это ведь та же переменная, только хитрого типа. Сравните:
Код:
int x;
x; //Выражение состоит из переменной x. Бессмысленно, но разрешено.

void f(int, double);
f; //Бессмысленно, но разрешено.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в использование структуры (С++) Артём Волжанкин Помощь студентам 6 10.11.2012 15:20
Повторное использование структуры Karmadon Общие вопросы C/C++ 2 29.02.2012 12:00
красивая распечатка структуры stat splattakasvs16 Общие вопросы C/C++ 0 10.05.2011 16:12
использование списка для структуры dimulka2010 Помощь студентам 0 28.03.2010 15:46
pop.gmail.com -- STAT MAcK Общие вопросы .NET 2 07.11.2008 10:07