C не будет компилироваться в Visual Studio 2010

У меня есть простая программа на C, которую я могу легко скомпилировать по командной строке в Linux, но хочу использовать Visual Studio для отладки программы, чтобы я мог более легко увидеть, что она делает, но я не могу ее скомпилировать.

Я создал новое консольное приложение cpp Win32. Добавлены мои файлы .c и .h, но я не могу их компилировать. Я получаю 100+ ошибок, которые в первую очередь кажутся красными сельдевыми. Например, у меня есть ошибка, говорящая, что переменная не объявлена, когда я вижу ее объявленную в строке непосредственно перед этим. Например:

int i; for (i = 0; i < unpacked_length; i++) { 

на строке «для» я получаю сообщение об ошибке: «ошибка C2065:« i »: необъявленный идентификатор”

Так что, очевидно, происходит что-то еще. Одна из ошибок, которая кажется законной, такова:

 static unsigned char* Base64_Charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 

IntelliSense: значение типа “const char *” не может использоваться для инициализации объекта типа “unsigned char *”

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

В исходный код входят только:

 #include "dtcrypt.h" #include  #include  

Цените любую помощь!

Visual Studio 2010 поддерживает только ANSI C (aka C89), он не поддерживает более современные стандарты языка C99 или C11. ANSI C требует, чтобы вы указали все свои переменные в верхней части функции, вы не можете определить их в середине функции непосредственно перед их использованием. Поэтому попробуйте переписать код следующим образом:

 void my_function() { /* Variable declarations go here */ int i; ... /* Now teh codez */ for (i = 0; i < unpacked_length; i++) { ... } } 

Для второй ошибки Intellisense жалуется, что не может преобразовать указатель на const char в указатель на const unsigned char . Строковые литералы имеют тип char[] (массив символов), а char по умолчанию подписан. Таким образом, вы должны объявить свою переменную как тип const char * вместо const unsigned char * . Или вы можете игнорировать его, поскольку это не ошибка компилятора, но это предупреждение на определенных уровнях предупреждения.

Независимо от того, подписан ли char или нет, это параметр компилятора в Visual C ++. Измените его на unsigned, чтобы соответствовать ожидаемой среде GCC. Свойства проекта, C / C ++, Язык.

Что касается i в цикле, должна быть дополнительная информация, которую вы не показываете. Две вставные линии выглядят кошерными ко мне.

Тем не менее, у меня есть большой опыт портирования кода между VC ++ и GCC – это почти никогда не бывает.

Вместо того, чтобы испортить настройки компилятора, приведите его к «unsigned char *»,

Например: unsigned char * Base64_Charset = (unsigned char *) “ABCDEFG”;