2013-08-20 6 views
-3

Я создал простую программу на языке C, и я пытаюсь ее скомпилировать с помощью gcc-компилятора. Но когда я исполню gcc test.c -o test он бросает некоторые ошибки:Попытка скомпилировать программу на языке C

test.c:1:19: error: cstdlib: No such file or directory 
test.c:2:20: error: iostream: No such file or directory 
test.c: In function ‘main’: 
test.c:8: error: ‘for’ loop initial declaration used outside C99 mode 

И моя C Программа очень проста, так что я не думаю, что проблема в коде:

#include <cstdlib> 
#include <iostream> 

int main(int args, char **argv){ 
    int result[500]; 

    for (int i = 0; i < sizeof(result); ++i){ 
     result[i] = 1; 
    } 

    return 0; 
} 

Спасибо!

+4

Вам нужно использовать файлы заголовков C++, используя g ++. И для вашего кода вам не нужен заголовочный файл. –

+3

Вы либо код на C++ (тогда вам нужно использовать' g ++ ', а не' gcc') или в C (тогда избавиться от C++ включает в себя). – Nbr44

+1

Чтобы прояснить сказанное выше, cha nge включает в «stdlib.h» и «stdio.h» – Inisheer

ответ

7

Расширение .c означает, что GCC интерпретирует исходные файлы как код C. Однако заголовок содержит заголовки C++, и поэтому компилятор C дает вам эти первые две ошибки. Чтобы исправить это, вы можете:

  • Изменение расширения файлов в .cpp вместо .c, который будет вызывать ваш исходный код должен интерпретироваться как код C++ с помощью GCC. В C++ все, что вы написали, является действительным.

Или:

  • Изменение первого заголовка включают в #include <stdlib.h> и удалить #include <iostream>, поскольку нет точного эквивалента iostream в С. На самом деле не нужно любой из этих заголовков для вашей программы, хотя , потому что программа очень проста.

Что касается ошибки цикла, проблема в том, что вы указали переменную i на этапе инициализации цикла for. Это недопустимо до C99, поэтому вы можете исправить это, перемещая объявление i выше цикла.

Так рабочая программа может выглядеть следующим образом:

#include <stdlib.h> 
#include <stdio.h> 

int main(int args, char **argv){ 
    int result[500]; 
    int i; 

    for (i = 0; i < sizeof(result)/sizeof(result[0]); ++i){ 
     result[i] = 1; 
    } 

    return 0; 
} 

В этом случае я оставил заголовок включает в программе, даже если они не нужны. stdio.h ближе всего к iostream вы можете перейти по ссылке C.

Как указано другими, для правильного поведения условие цикла петли также должно быть изменено на i < sizeof(result)/sizeof(result[0]).

Это потому, что sizeof при использовании с массивом дает размер массива в байтах, который в зависимости от вашей платформы, скорее всего, означает, что вы получите неправильное количество итераций в своем цикле. (Обычно int составляет четыре байта, и так, как вы его написали, ваш цикл будет перебирать 2000 раз вместо 500. Делясь на размер одного элемента вашего массива, вы получаете правильный результат каждый раз .)

Еще лучший подход может состоять из #define магического числа 500 в начале вашей программы и ссылаться на него таким образом, когда это необходимо.

Основная проблема заключается в том, что у вас действительно есть программа на C++, но вы хотите, чтобы она была программой на C. Вы должны решить, на каком языке вы действительно хотите использовать.

+0

И последняя ошибка, связанная с циклом for? Вы знаете эту ошибку? –

+0

Последняя ошибка также связана с тем, что вы используете синтаксис C++ с программой C. Если вы переключитесь на C, вы должны объявить переменную цикла вне цикла. Для C++ все в порядке. – Devolus

+0

Также предложите исправление 'sizeof (result)/sizeof (result [0])' как условие цикла: прочитайте [этот ответ] (http://stackoverflow.com/questions/18009725/weird-behavior-when-printing-array- in-c? lq = 1) –

1

cstdlib и iostream являются файлами заголовков C++. Для cstdlib вы можете использовать stdlib.h вместо этого. Однако вы не можете использовать iostream, поскольку iostream - это чистая библиотека ввода-вывода C++. Я предполагаю, что у вас может быть «stdio.h "

Более того, если вы хотите использовать эту функцию, например, объявить переменную« i »в начальной части цикла« for », вы можете скомпилировать свою программу в режиме C99 из-за того, что стандарт языка C до того, как C99 не поддерживает этот вид использования.

Чтобы скомпилировать исходный код ac, например «ac», в режиме C99, просто добавьте параметр -std = c99 в вашу команду gcc. Например: «gcc -std = c99 ac "

Смежные вопросы