Выражение для создания структуры - PullRequest
3 голосов
/ 18 июля 2010

Возможно ли в C создание структур "inline"?

typedef struct {
    int x;
    int y;
} Point;
Point f(int x) {
    Point retval = { .x = x, .y = x*x };
    return retval;
}
Point g(int x) {
    return { .x = x, .y = x*x };
}

f действительно, g нет.То же самое относится и к вызовам функций:

float distance(Point a, Point b) {
    return 0.0;
}
int main() {
    distance({0, 0}, {1, 1})
}

Возможно ли как-то создать эти структуры без необходимости использования дополнительной временной переменной (которая, я думаю, будет оптимизирована компилятором, но читаемость тоже имеет значение)?1009 *

Ответы [ 2 ]

8 голосов
/ 18 июля 2010

С помощью компилятора C99 вы можете сделать это.

Point g(int x) {
    return (Point){ .x = x, .y = x*x };
}

Ваш звонок на distance будет:

distance((Point){0, 0}, (Point){1, 1})

Они называются составными литералами, см., Например, http://docs.hp.com/en/B3901-90020/ch03s14.html, http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Compound-Literals.html, http://home.datacomm.ch/t_wolf/tw/c/c9x_changes.html для некоторой информации.

0 голосов
/ 18 июля 2010

Одним словом нет . Автоматическое создание (подразумеваемых) типов и деструктуризация аргументов функций не поддерживается в C.

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