Форум программистов, компьютерный форум CyberForum.ru

корректен ли код void f (struct x *this);? (объявление функции) - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
31.10.2011, 16:02     корректен ли код void f (struct x *this);? (объявление функции) #1
...На солидном ресурсе встретил большой код, но я его конечно упростил до минимума.

C++
1
2
3
4
5
6
7
8
9
10
11
12
struct x {
 int y;
};
 
//Вот на эту строчку ругается компилятор, говорит, что 
//ожидается троеточие или запятая перед this
void f (struct x *this);
 
 
int main () {
   return 0;
}
Корректен ли код? Спасибо, кто откликнется.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 16:02     корректен ли код void f (struct x *this);? (объявление функции)
Посмотрите здесь:

C++ Функции типа void
C++ Объявление struct в элемент массива.
C++ Функции в struct
Функции.Зачем нужны void функции? C++
Изменение значение аргумента в void-функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
31.10.2011, 16:15     корректен ли код void f (struct x *this);? (объявление функции) #2
kravam, это абсолютно корректный код на языке С (объявление функции, принимающей в качестве аргумента указатель на объект структуры x). Компилировать любым C-компилятором
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
31.10.2011, 16:35  [ТС]     корректен ли код void f (struct x *this);? (объявление функции) #3
A this-то зачем?
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
E:\Dev-Cpp_nomingw\bin>g++ ra.cpp
ra.cpp:7:19: error: expected ',' or '...' before 'this'
 
E:\Dev-Cpp_nomingw\bin>gcc ra.cpp
ra.cpp:7:19: error: expected ',' or '...' before 'this'
 
E:\Dev-Cpp_nomingw\bin>g++ --version
g++ (GCC) 4.5.0 20100311 (experimental)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 
E:\Dev-Cpp_nomingw\bin>gcc --version
gcc (GCC) 4.5.0 20100311 (experimental)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
31.10.2011, 16:41     корректен ли код void f (struct x *this);? (объявление функции) #4
kravam, this - это всего лишь имя формального параметра функции. Вместо него можно было бы написать:
C
1
void f (struct x* xptr);
И да, я же сказал, компилируй С-компилятором (сохрани с расширением *.c, скорми исходник gcc) - видать, твоя сборка делает определение языка по расширению, а в С++ this - это зарезервированное ключевое слово, вот и возникает синтаксическая ошибка:
Код
[nameless@desktop c]$ cat main.c
#include <stdio.h>
#include <stdlib.h>

struct foo
{
    struct foo* next;
};

void bar(struct foo* this);

int main(void)
{
    exit(0);
}
[nameless@desktop c]$ make
gcc -Wall -g -ansi -pedantic -pedantic-errors   -c -o main.o main.c
gcc -o sample -lm main.o
[nameless@desktop c]$ ./sample 
[nameless@desktop c]$ gcc --version
gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.

[nameless@desktop c]$
Yandex
Объявления
31.10.2011, 16:41     корректен ли код void f (struct x *this);? (объявление функции)
Ответ Создать тему
Опции темы

Текущее время: 07:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru