Проблемы в вашем коде
Allright. Теперь, когда вы предоставили весь код, вам легче объяснить ваши проблемы:
- Вы пытаетесь определить переменные "в середине" ваших функций. C не позволяет это . Вы должны определить все свои переменные в самом начале. Вот что дает вам
error C2143: syntax error : missing ';' before 'type'
ошибки.
- То же самое относится и к объявлению функции (должно быть вверху функции).
Следовательно, изменение вашего кода на следующее заставляет его работать:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ARRAY_SIZE 11
#define VECTOR_SIZE 5
main() {
void f(long double fa[], long double fb[], long double fA, long double fB);
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
long double* k = (long double*) malloc(sizeof (long double) * VECTOR_SIZE);
int i;
long double A, B;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
B = 2;
for (i = 0; i < VECTOR_SIZE; i++) {
k[i] = 0;
}
k[1] = 4;
k[2] = 8;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(k, z, A, B);
free(z);
free(k);
z = NULL;
k = NULL;
}
void f(fa, fb, fA, fB)
long double fa[], fb[], fA, fB;
{
fa[0] = fb[1]* fA;
fa[1] = fa[1] - 1;
fb[0] = 2* fB - fa[2];
printf("fa[2] is 8 and is the same as *[fa + 2] and is %3.3Le\n", *(fa + 2));
printf("\nAddress of &fa[2] is %x\n", &fa[2]);
printf("same address is fa + 2 is %x\n", fa + 2);
return;
}
Несколько других пунктов
Теперь я добавлю еще несколько советов, которые, возможно, не являются строго ошибками (имеется в виду, что они все еще компилируются ...), но не являются очень хорошими методами кодирования:
- Как я уже говорил, используйте
const
с для определения констант, а не #define
с.
- правильно определите
main()
- то есть int main() {...
, а не просто main()
без типа возврата. Это работает в C, но не работает в C ++, и я считаю это плохим стилем. (Какого черта я должен предполагать, что функции возвращают int, если ничего не сказано? Почему бы не void?)
- После этого вы должны явно вернуть значение из
main()
.
- Я предпочитаю объявлять прототип функции
void f(long double fa[], long double fb[], long double fA, long double fB);
за пределами main()
.
- При определении функций используйте современный синтаксис, который вы использовали в прототипе, а не древний:
void f(fa, fb, fA, fB)
long double fa[], fb[], fA, fB;
{
Должно стать:
void f(long double fa[], long double fb[], long double fA, long double fB) {
.
Таким образом, ваш код превращается в:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void f(long double fa[], long double fb[], long double fA, long double fB);
int main() {
const int ARRAY_SIZE = 11;
const int VECTOR_SIZE = 5;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
long double* k = (long double*) malloc(sizeof (long double) * VECTOR_SIZE);
int i;
long double A, B;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
B = 2;
for (i = 0; i < VECTOR_SIZE; i++) {
k[i] = 0;
}
k[1] = 4;
k[2] = 8;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(k, z, A, B);
free(z);
free(k);
z = NULL;
k = NULL;
return 0;
}
void f(long double fa[], long double fb[], long double fA, long double fB) {
fa[0] = fb[1]* fA;
fa[1] = fa[1] - 1;
fb[0] = 2* fB - fa[2];
printf("fa[2] is 8 and is the same as *[fa + 2] and is %3.3Le\n", *(fa + 2));
printf("\nAddress of &fa[2] is %x\n", &fa[2]);
printf("same address is fa + 2 is %x\n", fa + 2);
return;
}
Что мне кажется лучше.
Первое сообщение
Пожалуйста, предоставьте весь свой код. Я тестировал следующий код в Visual C ++ 2008 Express с отключенными «языковыми расширениями» и предупреждениями 4 уровня. Работает просто отлично:
#include <stdlib.h>
#include <stdio.h>
int main() {
const int ARRAY_SIZE = 1024*1024;
long double *z1 = (long double *)malloc(sizeof (long double) * ARRAY_SIZE);
if (z1 == NULL) {
printf("Out of memory\r\n");
exit(-1);
}
printf("Awesome!\r\n");
return 0;
}
Может быть, вы забыли включить, может, вы сделали что-то еще не так. Сам фрагмент кода выглядит совершенно нормально. Вторая ошибка, которую вы описали, кажется совершенно не связанной:
error C2065: 'L' : undeclared identifier // this error repeats for all my identifiers
Кстати, предпочитайте const
, а не #define
.