Compatibility of source code between windows IDE and gcc? - c

I'm grappling with some homework which was requested as linux gcc compatible (and limited to the libraries stdio, stdlib and string). However, being unfamiliar with Linux and having to code without an IDE makes this not a pleasant experience.
Is there any reason why, sticking to the above libraries, I could make code that doesn't run the same in a windows IDE and linux' gcc? If so, is there specific factors I could avoid to keep the source code compatible between the two?

Related

C environment for learning the sufficiently hard way [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
Closed 10 years ago.
I'm new to C(coming from Java, so I'm not learning programming for the first time). I'm reading the book, "C Primer Plus". I've been searching around to understand the differences between compilers or environments to develop C programs on Windows.
I have installed MinGW and Visual Studio 2010. I have tested compiling a hello world on both environments. For MinGW, I'm considering Code::Blocks or vim. The multi compiler support on Code::Blocks sounds convenient, but I'm not at that level to comprehend how helpful this feature would be.
I'm willing to learn C the way I should be instead of being spoiled by letting the works done background hidden by IDE like Visual Studio. Once I improve my understanding, I don't mind switching to a more convenient environments.
The reason I feel uncomfortable with Visual Studio is that it doesn't support the standards as much as gcc. I have read an argument that VS is used widely in production and that this is just the way it is. Some people say just start writing C wherever which is what I don't want. I've seen some say experience the command prompt and see how the linking is done, etc.
This is from Wikipedia, but it says that Visual C++ shouldn't be used for compiling C. http://en.wikipedia.org/wiki/Visual_C%2B%2B#Issues
So here is what I need to make clear. It might be a few blocks.
My understanding is that Visual Studio is appropriate as long as I'm developing for Windows platform and also good for people who just want to start coding.
If I want to go with the more up-to-date standards and use gcc (which is used in Linux), I should go for MinGW. MinGW is the minimum gcc-like environment ported to Windows, so I can use the similar environment to Linux which benefits me for the standards better supported than VS. Also, this is supposed to help my program to be compiled more successfully on Linux and not exactly for compiling a program on Windows MinGW to run on Linux, right?
The portability we talk about is compiling a source code on each platform and not to compile a program on one particular platform to use the executed file on other platforms, correct?
Whilst Visual C++ isn't a C compiler, the Visual studio tools do allow compiing C code - the compiler under the Visual Studion is what is used to compile almost all of Microsofts C code (and there is A LOT of C code in a Microsoft Windows system, even if a fair chunk of the newer tools may be C, the basis for a lot of things is still C). You just have to ensure that you compile C as C, not as C++, since C++ has slightly different flavours of some things - some things that are allowed in C aren't in C++.
The way to do that is to call the file something.c, rather than something.cpp - it REALLY is that easy.
gcc is also a very competent compiler, absolutely no doubt about that. And using the tools in Code::Blocks etc will be a good way to learn.
I would actually say that Visual studio is definitely a smoother, slicker environment, and you can still use command-line tools like make to build things if you like - the compiler isn't part of the IDE, it's just a nicely integrated IDE. Learning a computer language should have as few obstacles as possoible. Making life hard for yourself is no help.
I personally use (x)emacs and gcc on Linux, but the first time I programmed in C, there wasn't even a proper standard for it, and computers typically had 8- or 16-bit processors - our school computer in 1985 had 2MB of ram and 3 disks of 64MB each (131000 something blocks of 512byte). That machine had 8 terminals in my school, 8 more terminals in another school, and the main school where the actual computer was had two rooms with, I think 16 terminals in each. So we sometimes shared the machine between 30 people!
You should choose whatever platform that feels the most comfortable to you, and wait with worrying about the complications of cross platform portability etc. Coming from Java you'll get your hands full with pointers and the like in the beginning, so focus on that instead of the environment.
If you have written Java in an Eclipse environment before, the CDT plugin for C/C++ might be the way to go. It does among others support the gcc tool chain.
Regards
If you're gonna compile for Windows, try CodeBlocks, Dev-CPP or Eclipse as they all use GCC i think. Essentially you want something that doesn't force you to make a new solution/include a new project / make a new file just so you could test a few functions out. You want to compile a single .c file and run it, and play in that format.
If you're gonna compile for Linux, try Geany, Eclipse or just use gcc. Might as well pick up makefiles while you're at it.
Apart from that, write C code, or look where some of those public native java calls end up. But don't look at the math package, you'll be disappointed.
EDIT: just noticed your portability. Yes, you need to recompile on every target, or use a cross-compiler.
But cross-compiling is not enough, one must write code for different platforms too, say in Windows you will use the Win API call CreateThreadA(), but in a linux-build you will probably use pthread_create(). You should get familiar with using
//some code
#ifdef __platform_windows
//windows code here
#endif
#ifdef __platform_linux
//linux code here
#endif
//crossplatform code

Compiling and Distributing C Programs

I just finished a semester up of C programming for a class I'm in, and it has left me with some questions that I was hoping to get answered.
During my class we have been using GCC to compile C programs. This is all good and well, but I have a question about compiling.
What if I wanted to build a C program on Windows? There is no GCC. Is that what Microsoft Visual Studio is for?
Also, what if I wanted to compile a program and distribute it? What would I compile to distribute to other Window's users?
In summary, I know how to write C programs, but I just don't get how you would make a program to give to someone who doesn't have a C compiler and is basically computer dumb.
Thanks in advance,
Ryan
Generally you will need to do two things:
Compile your program into a stand-alone executable or binary.
a. On Windows this would be a win32 executable.
b. On Linux this would be an elf binary.
Create an installer package for your program.
a. On Windows you might use NSIS, Microsoft MSI, or InstallShield.
b. On Linux you would do well to use a packager for the distribution you want to target.
Anecodtally, it is very easy to utilize Eclipse CDT and NSIS to develop C and C++ software on Windows without needing to pay any license fees.
Eclipse CDT: http://eclipse.org/cdt/
Starter Guide: http://www.codeproject.com/KB/tips/CPP_Dev_eclipse_CDT.aspx
NSIS: http://nsis.sourceforge.net/Main_Page
Note that if you use Visual Studio then you will also need to compile in release mode and distribute the Visual Studio CRT or .NET runtime(s). It depends upon how you link to the standard library provided by your compiler.
you can get GCC for windows....
but, Visual Studio is probably a better choice.
Once you have built it, you can use something like Wix or InnoSetup to make an install program for it.

ANSI C MultiPlatform Compiler and GUI

Hi guys I have an ANSI C university course.
I am looking for a compiler that will easily create
makefiles and .o files and binaries that would work on both windows and ubuntu.
all code i write must be multiplatform.
(Im a C#/C++ programmer, didn't touch C for over 10 years)
no need for any external library support except ones that are part of the spec.
I assume its C99 though might be C90
nice Dev Env GUI preferably same for both windows and ubuntu is needed as well
how to make sure I don't use none-standard libraries?
I think gcc is your best option. On Windows the best port is probably MinGW.
You edited your question to request an IDE too. Try Code::Blocks.
I will recommend Eclipse as the IDE. It has some issues on Windows, but it is great on Linux.
GCC/MinGW as compiler doesn't need much discussing.

Most Common C / C++ Compiler for NetBeans and Windows

What is the most commonly used (simplest) C / C++ compiler used on Windows when using the NetBeans IDE (6.7)?
I want to write (mostly) simple C programs. I have Cygwin installed but for some reason NetBeans doesn't like it. I'm getting a error from it and before I try to figure this out, I thought I should find and (if needed) configure a more popular one.
makeinfo: --fill-column arg must be numeric, not
nbproject/Makefile-Debug.mk'.
Trymakeinfo --help' for more information.
I believe I'm getting this error because I don't have make installed.
I've also found this stackoverflow post (C/C++ Compiler for windows) but and that suggests to use MinGW compiler tools.
What is the difference between MinGW and Cygwin? Which is better or preferred? and are there any other options?
The difference between Cygwin and MinGW is the the Cygwin tools (and the executables generated) rely on the cygwin DLL that provides a POSIX-like layer for the application.
MinGW are native Win32 tools (in that they do not require the presence of the Cygwin DLL) that produce native Win32 executables that do not need the Cygwin DLL.
My personal preference is for MinGW, but if you're going to be building programs that have a Unix heritage, the Cygwin toolset will likely help you build the program to run on Windows more than the MinGW toolset will.
I'm not sure what the licensing implications of linking to the Cygwin DLL are (I forget if it's GPL or LGPL).
Here is a good post I just found for getting cygwin and Netbeans working together.
Configuring cygwin with netbeans in Windows
And just so you know, cygwin and MinGW are by far the two most popular open source solutions for C/C++ on windows. Other popular compilers exist, but are not free (Borland C++, Microsoft Visual C++, etc)

C compiler for Windows? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm fine working on Linux using gcc as my C compiler but would like a Windows solution. Any ideas? I've looked at Dev-C++ from Bloodshed but looking for more options.
You can use GCC on Windows by downloading MingW (discontinued) or its successor Mingw-w64.
You can get Visual C++ Express Edition straight from Microsoft, if you want something targeting Win32. Otherwise MinGW or lcc, as suggested elsewhere.
GCC is ubiquitous. It is trusted and well understood by thousands of folks across dozens of communities.
Visual Studio is perhaps the best IDE ever developed. It has a great compiler underneath it. But it is strictly Windows-only.
If you're just playing, get GCC --it's free. If you're concerned about multiple platfroms, it's GCC. If you're talking serious Windows development, get Visual Studio.
You could always just use gcc via cygwin.
There is another free C compiler for Windows: Pelles C.
Pelles C is a complete development kit for Windows and Windows Mobile. It contains among other things an optimizing C compiler, a macro assembler, a linker, a resource compiler, a message compiler, a make utility and install builders for both Windows and Windows Mobile.
It also contains an integrated development environment (IDE) with project management, debugger, source code editor and resource editors for dialogs, menus, string tables, accelerator tables, bitmaps, icons, cursors, animated cursors, animation videos (AVI's without sound), versions and XP manifests.
URL: http://www.smorgasbordet.com/pellesc/
I personally have been looking into using MinGW (what Bloodshed uses) with the Code Blocks IDE.
I am also considering using the Digital Mars C/C++ compiler.
Both seem to be well regarded.
GCC is not technically a linux specific compiler. Its a standards compliant c/c++ compiler, and I use it for windows programs on a daily basis. Its probably best that you use it until you become more comfortable with something else.
I recommend that you use the MinGW distribution of GCC. That will compile your programs natively for windows, using a standard library, etc.
If you're looking for an IDE, I have two recommendations. Visual Studio is the Microsoft version, and although it has its issues, it is an excellent IDE for working with the code. However, if you're looking for something a bit more lightweight, CodeBlocks is also rather good, and has the added benefit of being able to use basically any compiler you have installed (including several forms of GCC and the Microsoft Compiler that comes with Visual Studio) and being able to open project files fro other IDEs. Plus, it runs on linux too, so you could make that transition even easier on yourself.
I personally prefer GCC, but that's just me. If you really want the Microsoft Solution, VS is the way to go.
You may try Code::Blocks, which is better IDE and comes with MinGW GCC! I have used it and its just too good a freeware IDE for C/C++.
MinGW would be a direct translation off gcc for windows, or you might want to check out LCC, vanilla c (more or less) with an IDE. Pelles C seems to be based off lcc and has a somewhat nicer IDE, though I haven't used it personally. Of course there is always the Express Edition of MSVC which is free, but that's your call.
Most universities give you access to Microsoft Dreamspark.
If you're using GCC/Linux in class, just install Ubuntu. Windows is a terrible platform for C development.
Be careful to use a C compiler, not C++ if you're actually doing C. While most programs in C will work using a C++ compiler there are enough differences that there can be problems. I would agree with the people who suggest using gcc via cygwin.
EDIT:
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B shows some of the major differences
http://www.mingw.org/wiki/HOWTO_Install_the_MinGW_GCC_Compiler_Suite
GCC works fine. Note that MSVC is not necessarily a valid solution because it does not support C99.
I'm late to this party, but for any future C folks on Windows, Visual Studio targets C90 instead of C99, which is what you'd get on *nix. I am currently targeting C99 on Windows by using Sublime Text 2 in tandem with Cygwin.
Cygwin offers full GCC support on Windows; also, the free Microsoft Visual C++ Express Edition supports 'legacy' C projects just fine.
Visual C++ Express is a fine and free IDE for Windows which comes with a compiler.
If you are more comfortable with commandline solutions in general and gcc in particular, MinGW or Cygwin might be more up you alley. They are also both free.
There have been a few comments pointing out that C is not C++. While that's true, also true that any C++ compiler will also compile C - usually the compiler mode will be automatically selected based on the filename extension, but every compiler also has an option to force C or C++ mode regardless of the filename.
So choose the free C++ compiler that you're most comfortable with gcc, VC++ Express, Digital Mars, whatever. Use the IDE you like best emacs, vim, VC++ Express, Code::Blocks, Bloodshed - again whatever.
Any of these tools will be more than adequate for learning. Personally, since you're asking about Windows, I'd choose VC++ Express - it's a great IDE, it's free, and it'll compile C programs just fine.
It comes down to what you're using in class.
If the labs and the assignments are in linux, then you probably want a MinGW solution. If they're in windows, get Visual Studio Express.
Can't you get a free version of Visual Studio Student Addition from your school? Most Universities have programs to give free software to students.
You mean Bloodshed's Dev-C++? It's a nice visual IDE for C++ which uses MinGW's gcc for Windows as the back-the-scenes compiler. The project's been abandoned for a while (in my opinion, using Delphi to develop a C++ IDE is a very stupid thing to do to draw developers' attention), however there's nothing that stops you from using it and updating the version of MinGW's gcc it uses to the latest one - besides it's GPL-licensed.
I use either BloodShed's DEV C++, CygWin, or Visual C++ Express. All of which are free and work well. I have found that for me, DEV C++ worked the best and was the least quirky. Each compiler has it's own quirks and deifferences, you need to try out a few and find the one with which you are most comfortable. I also liked the fact that DEV C++ allowed me to change the fonts that are used in the editor. I like Proggy Programming fonts!
Must Windows C++ compilers will work.
Also, check out MinGW.

Resources