Reputation: 1711
I have a simple C program that I can compile via command line on Linux easily enough but want to use Visual Studio to debug the program so that I can more easily see what it's doing but I cannot get it to compile.
I have created a new cpp Win32 console application. Added my .c and .h file but I cannot get it to compile. I get 100+ errors that primarily seem to be red herrings. For instance I have an error saying a variable isn't declared when I can see it declared on the line immediately before. For instance:
int i;
for (i = 0; i < unpacked_length; i++)
{
on the "for" line I get an error: "error C2065: 'i' : undeclared identifier"
So something else is obviously going on. One error that seems legit is this one:
static unsigned char* Base64_Charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
IntelliSense: a value of type "const char *" cannot be used to initialize an entity of type "unsigned char *"
Since this works when compiling via command line I don't know why the intellisense would be giving this error here unless this compiler has different rules than the other one I used via command line. I haven't done any C for about 15 years and don't know if this could be a difference in compiler or if there is something else going on here.
The only includes in the source are:
#include "dtcrypt.h"
#include <string.h>
#include <stdlib.h>
Appreciate any help!
Upvotes: 0
Views: 3310
Reputation: 59
Instead of messing up with compiler settings typecast it to "unsigned char *"
E.g. : unsigned char* Base64_Charset = (unsigned char *)"ABCDEFG";
Upvotes: 0
Reputation: 400274
Visual Studio 2010 only supports ANSI C (aka C89), it does not support the more modern C99 or C11 language standards. ANSI C requires you to declare all of your variables at the top of a function, you cannot define them in the middle of a function just before they are used. So try rewriting your code like this:
void my_function()
{
/* Variable declarations go here */
int i;
...
/* Now teh codez */
for (i = 0; i < unpacked_length; i++)
{
...
}
}
For the second error, Intellisense complaining that it can't convert a pointer to const char
to a pointer to const unsigned char
. String literals have type char[]
(array of characters), and char
is signed by default. So, you should declare your variable as type const char *
instead of const unsigned char *
. Or, you can ignore it, since it's not a compiler error, but it is a warning at certain warning levels.
Upvotes: 3
Reputation: 61351
Whether char
is signed or not is a compiler setting in Visual C++. Change it to unsigned to match the expected GCC environment. Project properties, C/C++, Language.
As for i
in the loop, there must be some extra info that you're not showing. The two pasted lines look kosher to me.
That said, I have ample experience porting code between VC++ and GCC - it's hardly ever pretty.
Upvotes: 1