Могу ли я объявить функцию без указания типа для одного из параметров? - PullRequest
0 голосов
/ 30 апреля 2011

Может ли функция быть определена так:

int foo(int temp1, int temp2 temp3) {
   ...
}

В частности, с temp2 и temp3, это приведет к ошибкам?Если нет, каков общий эффект?

Ответы [ 7 ]

5 голосов
/ 30 апреля 2011

Вы все не правы .. Это идеально верно с:

#define temp2 blah) { return 1; } int foo_ (int
int foo(int temp1, int temp2 temp3)
{
        return 0;
}

(Это результат моего чувства юмора в первую очередьутром - не стесняйтесь понижать голос, если хотите;))

3 голосов
/ 30 апреля 2011

Нет, это не верно C.

3 голосов
/ 30 апреля 2011

Ошибка - общий эффект.

1 голос
/ 30 апреля 2011

Если вы действительно пытаетесь передать три аргумента в функцию, но знаете только два типа во время компиляции, вы можете сделать это, используя список переменных аргументов. Предположим, вы хотите, чтобы третьим аргументом был int или double, но вы должны сначала проверить temp1 или temp2, чтобы узнать, каким он должен быть:

#include <stdarg.h>

int foo(int temp1, int temp2, ...) {
    va_list ap;
    int     temp_int;
    double  temp_double;

    va_start(ap, temp2);
    /*
     * Figure out what type you want the third argument to be
     * and use va_arg(ap, int) or va_arg(ap, double) to pull
     * it off the stack.
     */
    va_end(ap);

    /*
     * Get on with what foo() is really all about (including
     * return an int.
     */
}

Этот тип хака не защитит вас от того, что кто-то скажет foo(1, 2), foo(3, 4, "fish") или подобные махинации, но это С и С, предполагающие, что вы выросли и отвечаете за свои собственные действия.

0 голосов
/ 30 апреля 2011

То, что вы написали, - это не способ вызова функций, а способ их объявления. Вам потребуется тип данных перед каждым из формальных параметров (int temp1, int temp2, int temp3)

0 голосов
/ 30 апреля 2011

, если emp2 и temp3 являются параметрами, поэтому каждый из них должен иметь свой собственный тип, но это приведет к ошибке компиляции

0 голосов
/ 30 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...