Archive for the ‘C’ Category

In a C or C++ program, fork() can be used to create a new process, known as a child process. This child is initially a copy of the the parent, but can be used to run a different branch of the program or even execute a completely different program. After forking, child and parent processes […]

C/C++ gotcha – using #if true

Posted: 14th April 2014 by Tim in C, C++
Tags: , , , , , , ,

Consider the following code, which compiles without warnings with both gcc and g++: #include <stdio.h> int main(int argc, char **argv) { #if true     printf(“This does what you expect\n”); #else     printf(“This does not do what you expect!\n”); #endif     return 0; } When compiling with g++, the program prints This does what you expect. However, when compiling […]

C/C++ gotcha – ternary operator casting

Posted: 13th January 2014 by Tim in C, C++
Tags: , , , , , ,

C and C++ have what is known as a ternary operator; syntax which allows you to do conditional operations inline. This is done using syntax similar to: const int b = (<condition> ? 10 : 100); This will set b to 10 if <condition> is true, or 100 otherwise. Ternary operators allow code to be […]

Running C++ code from a C program

Posted: 11th April 2013 by Tim in C, C++
Tags: , , , , , , , ,

There are times where you have a C program but would like to call code written in C++. This is quite easy to do, and if done right will work on all (compliant) compilers on multiple platforms. To achieve this, you need to declare your function(s) to look like C functions in a header file. […]

C and C++ code is generally pretty easy to make sense of. But there are a few oddities which can catch you out and can send you into an endless debugging exercise if you’re not careful. One such oddity is conditional evaluation. Consider the following code which keeps track of three numbers. Look through the […]

Reading from a file in C

Posted: 31st October 2010 by Tim in C
Tags: , , , , , , , ,

Reading data from a file is fairly common. The stdio.h provides us with a function, getline, which allows us to read lines from a file without worrying about buffer overflows and other memory corruption issues that C is famous for. The following code opens a file named “myfile.txt” and prints out each line with the […]

A common question amongst coders new to C or C++ relates to the difference between stack and heap memory allocation. The answer lies in how the code is executed at the very lowest level. When a program is executed, each thread is allocated a limited amount of stack space. The stack holds information used by […]

Pthreads are a simple and effective way of creating a multi-threaded application. This introduction to pthreads shows the basic functionality – executing two tasks in parallel and merging back into a single thread when the work has been done. First I’ll run through the basics of threading applications with pthreads. Multi-threaded applications allow two or […]

Occasionally you need to check whether a float is a valid number. There are times, such as when the number is read in to a function as an argument, when you can’t assume that the check has already been done. This check can be done using the isnan(number) function from math.h. For example: #include <math.h> […]

If you’re trying to compile C programs for Linux on an AVR32 architecture, you’re going to have to get the avr32-linux-gcc cross compiler. Note that you can’t use the avr32-gcc compiler, as this compiler makes programs which do not run on an operating system (ie: they talk to the system directly), which will not run […]

The PostgreSQL documentation states that PQexecParams can be called like so: PGresult *PQexecParams(PGconn *conn, const char *command, int nParams, const Oid *paramTypes, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat); There are two parts of this call which can be tricky to novice C and/or PostgreSQL users and aren’t explained […]

Millisecond timer in C / C++

Posted: 18th October 2009 by Tim in C, C++
Tags: , , , , , , , ,

If you’re looking for a timer with fairly good accuracy in C or C++, you can use the functions in time.h and sys/time.h to build a millisecond timer. This is useful for things like evaluating the execution time of a program, roughly accurate to the nearest microsecond. double get_time_ms() { struct timeval t; gettimeofday(&t, NULL); […]

The following calculations have been sourced from the Navit Project source code, released under the GNU General Public License version 2. To convert latitude and longitude into UTM X and Y coordinates, we can simply perform two calculations (lat is latitude and lon is longitude): x = lon × 6371000.0 × pi รท 180 y […]

Log bases in C

Posted: 3rd October 2009 by Tim in C

Math theory tells us that doing logarithms to custom bases can be done in the following way: log[base n](x) = log(x) / log(n) we can do the same in C. For example, if we wanted to calculate log[base 2](x): #include <math.h> … double log_2 = log(x) / log(2.0); Be sure to compile with the -lm […]

Nanosleep in C / C++

Posted: 29th September 2009 by Tim in C, C++
Tags: , , , , , , , ,

usleep is not a very accurate form of sleep in C / C++. From the man page: The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers. nanosleep, on the other hand, is much more accurate. The following code will […]

If you’re looking to make yourself a GPS navigator on your laptop / PDA / whatever, you can get it set up pretty quickly using an open source GPS navigation package called Navit. For this walkthrough, we’ll make the assumption that you have a GPS receiver connected through serial or USB, and that you’re running […]

MySQL comes with a library to make talking to MySQL with C easyish. There are a few things you have to install first, though. I’m using Ubuntu 8.04 for this walkthrough, but things should be similar for other flavours of Linux. Before we start, we have to download the development files required: sudo apt-get install […]

Communicating through a serial port in C is pretty simple once it’s set up; you just read and write to it as though it was a file. The setting up, however, can be a real pain. Here’s the short and simple way to get it done. Note that this code requires the following headers: #include […]