2014-02-07 1 views
2

Я недавно был представлен в мире программирования и на языке C.Понимание концепции функциональной перегрузки при использовании функции pow

У меня возникла проблема с пониманием следующей концепции, когда я пытался использовать функцию pow из библиотеки math.h, чтобы выполнить некоторые вычисления в моем коде.

В то время как я проходил в качестве параметров военнопленный функции двух переменных, х, и я, как объявлены как целые числа, я получил ошибку из моего IDE (Visual Studio 2012) с указанием

: «более чем один экземпляр перегруженная функция «бух» совпадает со списком аргументов»:

Function “pow(double _X, int _Y)” 
Function “pow(float _X , int _Y)” 
Function “pow(float _X , int _Y)” 
Function “pow(long double _X, int _Y)” 

Argument types are (int, int). 

Я знаю, что функция пау возвращает двойное значение, но то, что происходит, скажем, когда вам нужно работать только с целыми числами Почему невозможно хранить? возвращаемое значение функции для объявленной переменной как двойное и имеющее два целых числа в качестве параметров?

Поиск Википедию, когда я не мог найти что-либо отношение здесь в Stack Overflow, единственное дано определение перегрузки функций заключается в следующем:

«Функция перегрузки или перегрузки методов является функция, встречающаяся в различных языках программирования, таких как Ada, C++, C#, D и Java, что позволяет создавать несколько методов с тем же именем, которые отличаются друг от друга по типу входа и выхода функции. Он просто определяется как способность одной функции выполнять разные задачи. "

Что такое функция перегрузки точно и как она влияет на поведение этой конкретной функции, которую я пытаюсь реализовать?

Извините заранее, если вопрос слишком банальный или ответили, или мне не хватает очевидной части головоломки.

+3

Нет функции перегрузки в C. – glglgl

+1

Начиная с C99 существует tgmath, который реализуется так называемыми типовыми макросами, которые похожи на перегрузку функций, но реализованы с различными правилами. http://pubs.opengroup.org/onlinepubs/009696699/basedefs/tgmath.h.html Это говорит о том, что OP, вероятно, компилируется с режимом C++, а не с режимом C – Brandin

ответ

2

Вы используете компилятор C++, нет функции перегрузки в (классическом) C.

Там, у нас есть различные функции для этих случаев (см the manual page here):

  • double pow(double x, double y);
  • float powf(float x, float y);
  • long double powl(long double x, long double y);

Так что всегда ясно из названия функции, что типы участвуют.

С версии C99 C вы можете использовать generics для реализации этого, и это уже сделано в заголовке <tgmath.h>. Этот заголовок дает вам функцию pow(), которая использует перегрузку.

Это довольно ясно из вывода ошибки, что у вас нет такого компилятора C.

+0

Возможно, упоминает, как сделать компиляцию C в VS12? – chux

+0

@EricPostpischil Gaah. Благодарю. – unwind

1

Нет функции перегрузки в С.
только перегрузки в C не является оператором перегрузки в компиляторе (int + int, float + float, & в адрес Организации, &, как побитовое и, * как указатель на имя, * в качестве Multipy. ..).

0

Вы не можете перегрузить функцию. Но если вы используете double, int, short, long, float, вы можете сделать одну функцию и передать аргумент casted.

double pow(double, double); 

int a; 
int b; 

int c = (int)pow((double)a, (double)b); 

Вы должны взять наибольший возможный тип. это простой трюк с компилятором.