Вызов функции в C без скобок, который работает, как? - PullRequest
0 голосов
/ 26 мая 2018

Я знаю, что есть вопросы, спрашивающие, можете ли вы вызвать функцию без скобок, и ответ на этот вопрос - нет, но в моем коде работает, и я хотел бы знать, почему.

typedef struct{
    //some variables
} REG;

long foo(){
    //some code
    return 23; //i.e 23, it could be any positive integer
}

REG * foo1(REG **ptr){
    //some code

    *ptr = calloc( (int) foo , sizeof(REG)); //foo without ()

    //more code
    fread(*ptr,sizeof(REG), foo(), fp); 

    return *ptr;

}

I 'm компилируется в xcode, он не выдает ошибку / предупреждение.

1 Ответ

0 голосов
/ 26 мая 2018

Может быть, я что-то упускаю, но похоже, что он берет адрес функции foo, приводит его к int и использует этот int в качестве первого аргумента (num) дляcalloc.Это, скорее всего, выделит большой объем памяти, а не только для 23 элементов, которые, по вашему мнению, выделяются, что объясняет, почему fread не вызывает никаких ошибок.

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