#c #function #struct #declaration #definition
Вопрос:
Я новичок в c, и я пытаюсь создать функцию, которая принимает два параметра типа double в качестве входных данных и возвращает структуру, содержащую каждый параметр в виде элементов, называемых «реальными» и мнимыми. Ошибка, которую я получаю, заключается в следующем:
error: expected identifier or ‘(’ before ‘double’
Ошибка указывает на строку, в которой я определяю функцию. Я знаю, что есть и другие сообщения, посвященные этой же ошибке, но, насколько я могу судить, это не та же проблема, что и в них (и приношу извинения, если это так).
Вот мой код:
#include <stdio.h>
int main(void) {
return 0;
}
struct make_complex(double real_input, double imaginary_input) {
struct complex {
double real;
double imaginary;
} complex_output = {real_input, imaginary_input};
return complex_output;
}
В конечном итоге я хочу вызвать функцию make_complex в main, но я полностью упростил main, чтобы исключить любой другой источник ошибок. Я попытался объявить функцию make_complex перед определением функции следующим образом:
struct make_complex(double real_input, double imaginary_input);
Это не сработало. Идеи?
Спасибо, что уделили мне время.
Комментарии:
1.
struct make_complex()
это тарабарщина. Вам нужно изучить структуру, прежде чем использовать структуру.
Ответ №1:
Возвращаемый тип функции должен включать тип структуры, а не только struct
. И вы должны определить тип структуры вне функции, чтобы на нее можно было ссылаться в вызывающих устройствах.
#include <stdio.h>
struct complex {
double real;
double imaginary;
};
int main(void) {
return 0;
}
struct complex make_complex(double real_input, double imaginary_input) {
struct complex complex_output = {real_input, imaginary_input};
return complex_output;
}
Ответ №2:
В этом объявлении функции
struct make_complex(double real_input, double imaginary_input) {
компилятор рассматривает эту строку как объявление структуры с именем make_complex
.
Вам необходимо определить комплекс структуры перед объявлением функции, например
struct complex {
double real;
double imaginary;
};
struct complex make_complex(double real_input, double imaginary_input) {
struct complex complex_output = {real_input, imaginary_input};
return complex_output;
}
В C вы даже можете определить структуру в объявлении типа возвращаемой функции
struct complex { double real; double imaginary; }
make_complex(double real_input, double imaginary_input) {
struct complex complex_output = {real_input, imaginary_input};
return complex_output;
}
хотя это не очень хорошая идея.:)
Комментарии:
1. @user3629249 Если тип возвращаемого значения не указан, то объявление неверно.
2. кроме того, пожалуйста, обратите внимание, что «двойной комплекс» является допустимым типом в современном C
3. @user3629249 Определяется реализацией, поддерживает ли компилятор тип
4. @user3629249 Я не понял ваш вопрос о подписи, потому что такое объявление присутствует в моем ответе.
5. Я прочитал это слишком быстро и упустил деталь о том, что они не являются точкой с запятой в конце определения структуры