Проблема с передачей параметров функции... (при попытке передать функции параметры возникают проблемы компиляции)

Модератор: Модераторы разделов

Аватара пользователя
AsMasteR
Сообщения: 93
ОС: GNU/Linux Ubuntu 9.04

Проблема с передачей параметров функции...

Сообщение AsMasteR »

Доброго всем здоровья!
Вот решил прогать под Линь, ну значца как пологается читанул книгусу всё опробовал работает :crazy:
Довольный начал нормальный проджект. И тут как обычно.. в общем сабж при попытке передать функции параметры возникают проблемы компиляции. Ну и исходники, для наглядности:
Laba1.c

Код:

#include <stdio.h> #include <math.h> #include "laba1.h" double F(double x) //Исходная функция { const double a=1.1, b=1.3, c=0.7; return log(a)-(x-b)*(x-b)+c; } int main (void) { printf("V.Math labwork1, please wait....\n"); //Исходные данные const double e=0.001; int flag; //Результативные данные int kint; //Количество интераций double xk, xkold; //Соответственно последнее и предпоследнее значение х //Ввод данных double Xmin, Xmax, step, i; vvod: printf("Please input Xmin:\n"); scanf("%lf",&Xmin); printf("Please input Xmax:\n"); scanf("%lf",&Xmax); if (Xmax<Xmin) { printf("Xmax<Xmin repair it automatic? 1/0 \n"); if(flag=1) { step=Xmin; Xmin=Xmax; Xmax=step; }else if(flag=0) {goto vvod; }else {printf("ERROR!!!\n"); goto vvod;} } st: printf("Please input step for bad functions, if we have good function input '0' :\n"); scanf("%lf",&step); if (step < 0) {printf("ERROR!!! step<0\n"); goto st; } if (step = 0) //Если мы имеем дело с правильнй функцией { if( F(Xmin)*F(Xmax) > 0) //Если на данном промежутке функция не меняет знак, то.. { printf("Sorry, it's incorrect interval, please input correct interval"); goto vvod; }else method1(Xmin,Xmax,e); //Ну а если всё в порядке, вычесляем корень }else for(i=Xmin;i<Xmax;i=i+step) //Делим плохую функцию на хорошие промежутки { if( F(i)*F(Xmax) < 0) //Если на данном промежутке функция меняет знак, то.. {method1(Xmin,Xmax,e); //То выяесляем её всеми методами :) } } return 0; }

Laba1.h

Код: Выделить всё

/* Заголовочный файл */
void method1(double Xmi, Xma, ee);

Makefile

Код: Выделить всё

#Laba1 make

laba1: laba1.o method1.o
    gcc -o laba1 laba1.o method1.0
laba1.o:laba1.c
    gcc -c laba1.c
method1.o:method1.c
    gcc -c method1.c
clean:
    rm -f *.o laba1

method1.c

Код: Выделить всё

/* Метод №1 Метод хорд */
#include<stdio.h>
#include<math.h>
void method1(double Xmi, Xma, ee)
{
int i;
i=Xmi+Xma;
printf("now works method1....\n");
return 0;
}

и собственно, для чего я и выложил исходники ошибки компилятоа:

Код: Выделить всё

asmaster@user886:~/Документы/Math$ make
gcc -c laba1.c
In file included from laba1.c:3:
laba1.h:2: error: expected declaration specifiers or ‘...’ before ‘Xma’
laba1.h:2: error: expected declaration specifiers or ‘...’ before ‘ee’
laba1.c: In function ‘main’:
laba1.c:49: error: too many arguments to function ‘method1’
laba1.c:54: error: too many arguments to function ‘method1’
make: *** [laba1.o] Error 1

Жду советов. Надеюсь таки почувствовать себя комфортно прогая под Линем.. :rolleyes:
Вот прям в этот самый момент я ЖИВУ, и радуюсь ЖИЗНИ и МИРУ на нашей маленькой планете. И ничто и никто не сможет переубедить меня в том, что я счастлив... Dont worry, be happy!!!! Жду друзей у себя на сайте WhiteHakeR
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Проблема с передачей параметров функции...

Сообщение BlackStar »

Код: Выделить всё

void method1(double Xmi, double Xma, double ee)
LightLang Team
Спасибо сказали:
Аватара пользователя
AsMasteR
Сообщения: 93
ОС: GNU/Linux Ubuntu 9.04

Re: Проблема с передачей параметров функции...

Сообщение AsMasteR »

Большое спасибо! наконецто всё работает!
Вот прям в этот самый момент я ЖИВУ, и радуюсь ЖИЗНИ и МИРУ на нашей маленькой планете. И ничто и никто не сможет переубедить меня в том, что я счастлив... Dont worry, be happy!!!! Жду друзей у себя на сайте WhiteHakeR
Спасибо сказали:
MiK13
Сообщения: 1290
ОС: Linux Debian

Re: Проблема с передачей параметров функции...

Сообщение MiK13 »

BlackStar писал(а):
01.04.2009 17:20

Код: Выделить всё

void method1(double Xmi, double Xma, double ee)

gcc, похоже, допускает и такой вариант:

Код: Выделить всё

void method1(Xmi, Xma, ee)
  double Xmi, Xma, ee;
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Проблема с передачей параметров функции...

Сообщение deninok »

MiK13 писал(а):
02.04.2009 01:36
gcc, похоже, допускает и такой вариант:

Код: Выделить всё

void method1(Xmi, Xma, ee)
  double Xmi, Xma, ee;

Нет, уже не допускает. Это ведь устаревший С, в С99 так нельзя.
Спасибо сказали:
MiK13
Сообщения: 1290
ОС: Linux Debian

Re: Проблема с передачей параметров функции...

Сообщение MiK13 »

deninok писал(а):
02.04.2009 12:05
Нет, уже не допускает. Это ведь устаревший С, в С99 так нельзя.

А как указать gcc, чтобы он этого не допускал?
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Проблема с передачей параметров функции...

Сообщение Portnov »

gcc -Wall -Werror ...

Видимо, так. По вкусу добавить -ansi и -pedantic ;)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
MiK13
Сообщения: 1290
ОС: Linux Debian

Re: Проблема с передачей параметров функции...

Сообщение MiK13 »

Portnov писал(а):
02.04.2009 12:58
gcc -Wall -Werror ...

Видимо, так. По вкусу добавить -ansi и -pedantic ;)

Код: Выделить всё

mik13@mishak:/dev/shm$ ls -l
итого 4
-rw-r--r-- 1 mik13 mik13 85 2009-04-02 13:01 t.c
mik13@mishak:/dev/shm$ cat t.c
void method1(Xmi, Xma, ee)
double Xmi, Xma, ee;
{
  int i;
  i=Xmi+Xma;
  return;
}
mik13@mishak:/dev/shm$ gcc -c -Wall -Werror -ansi -pedantic t.c
mik13@mishak:/dev/shm$ ls -l
итого 8
-rw-r--r-- 1 mik13 mik13  85 2009-04-02 13:01 t.c
-rw-r--r-- 1 mik13 mik13 757 2009-04-02 13:07 t.o
Никаких даже предупреждений компилятор не выдал и объектный файл создал.
Проверял компиляторами gcc в Etch r0 и в Lenny

Я где-то встречал, что надо, вроде, какой-то макрос или имя определить, но сейчас уже не помню что.

А вот g++ транслировать этот файл отказался даже без всяких дополнительных ключей:
В Etch r0:

Код: Выделить всё

mik13@mishak:/dev/shm$ g++ -c  t.c
t.c:1: error: variable or field 'method1' declared void
t.c:1: error: 'Xmi' was not declared in this scope
t.c:1: error: 'Xma' was not declared in this scope
t.c:1: error: 'ee' was not declared in this scope
t.c:1: error: initializer expression list treated as compound expression
t.c:2: error: expected ',' or ';' before 'double'
t.c:3: error: expected unqualified-id before '{' token

В Lenny:

Код: Выделить всё

mik13@wrk:/dev/shm$ g++ -c t.c
t.c:1: error: variable or field 'method1' declared void
t.c:1: error: 'Xmi' was not declared in this scope
t.c:1: error: 'Xma' was not declared in this scope
t.c:1: error: 'ee' was not declared in this scope
t.c:3: error: expected unqualified-id before '{' token
Спасибо сказали: