Archive for the ‘C++’ Category

Passing function pointers as a parameter to another function can be tedious work. The function pointer definitions can be long and cumbersome to write, and obscure to read. Using pointers to member functions can be even more ambiguous. Fortunately, we can leverage the power of templates to make this work easier for us by making […]

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 […]

Using environment variables in C++

Posted: 26th February 2014 by Tim in C++
Tags: , , , , , ,

Sometimes you need to use environment variables from within your program. There are a few ways to get the environment into your program, but the most portable way is to use the getenv function. The function will return a pointer to the null-terminated string value, or NULL if the variable is not set. For example, […]

There are a few ways to do this, but one of the simplest ways to pretty-print code in LaTeX documents is to use the listings package. The package can be configured to use specific colors for different parts of the code, with many programming languages supported. The following document will display code for both C++ […]

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 […]

Namespace Alias in C++

Posted: 26th November 2013 by Tim in C++
Tags: , , , , , ,

Sometimes you may find yourself working with namespaces which are really long to type. Writing out the whole namespace can be tedious and make the code harder to read, and using use namespace can sometimes make the code ambiguous (and is discouraged by some coding guidelines). The solution to this is to create a namespace […]

Counting the number of occurrences of a given character in a std::string can be done using one function from the STL library: the std::count(…) function. This function takes three parameters: two iterators (the beginning and end of the desired search), and the item you wish to count. This function can be used for any STL […]

Using the signal(…) routine (defined in the csignal or signal.h headers), you can define how various signals are handled by your program. The routine takes two arguments; the first is the signal you wish to handle, and the second is the handling routine itself. The handling routine can be specified as SIG_DFL (default handling), SIG_IGN […]

One frequently used feature of C++ is templates. Templates can be applied to classes and functions to make your work more generic without sacraficing runtime performance. It’s a fantastic feature that brought with it one unexpected technology: template metaprogramming. Template metaprogramming essentially means doing some of your computation at compile time by taking advantage of […]

Functors in C++

Posted: 12th June 2013 by Tim in C++
Tags: , , , , , , ,

One neat feature of C++ is Functors, or function objects. Essentially, functors are just like normal objects, but they can be ‘called’ like any other function; they can take any number of arguments of any type and return a value of any type. However, because functors are objects, they can have state (without resorting to […]

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. […]

Imagine that you have read in a hexadecimal string from the command line, a config file or whatever, and you want to use this value in your program. To do this, you need to do a string to integer conversion, but in base 16 since it’s a hexadecimal string. To do this, you can use […]

Using memset or bzero on structs in C is a common way to clear the values contained within that struct. This generally works well in C as your structs will contain POD types, unions and other structs. However, in C++, these structs (or struct members) may also contain methods which assume the struct is in […]

bool &= bool in C++

Posted: 8th May 2012 by Tim in C++
Tags: , , , , , , , ,

I’ve seen a few questions on the web about whether you can use the &= operator safely with bool. This operator is a bitwise-AND, so you can’t use to logically AND other datatypes. bool is just one bit, but it’s possibly stored using a whole word size. It’s not obvious what the numeric value of […]

Struct sizes in C++

Posted: 24th March 2012 by Tim in C++
Tags: , , , , , , , , , , ,

Consider the following program: #include <iostream> struct A {     char a;     long b;     char c; }; struct B {     char a;     char c;     long b; }; int main() {     A a;     B b;     std::cout << “sizeof(a): ” << sizeof(a) << std::endl;     std::cout << “sizeof(b): ” << sizeof(b) << std::endl;     return 0; } To summarize, it […]

In C, if you want to convert a string into a number, you can use sprintf(), atoi() or a number of other utility functions. In C++, this can be achieved much more elegantly using std::stringstream objects. But what if you’re string represents a hexadecimal number? This is where stream manipulators come into play. By passing […]

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 […]

C++ can be a strange language. Most of the time it’s easy to work with, but occasionally you’ll get errors which take forever to debug. Take a look at the following code and write down what you think the output will be. #include <iostream> class Base { public:     virtual void test(int x = 0)     { […]

Reading from a file in C++

Posted: 27th September 2010 by Tim in C++
Tags: , , , , , , , , ,

Reading data from a file is common in programming. C++ makes this process fairly painless with the ifstream class. When combined with the string class, you can avoid the memory and buffer overflow issues which you would have to deal with in C. The following example opens a file named “myfile.txt” and prints out each […]

Namespace aliases in C++

Posted: 9th September 2010 by Tim in C++
Tags: , , , , ,

In C++, it’s good practice to explicitly specify the namespace of a class instead of using the using syntax. This makes your code more readable, more explicit and is generally just good style. Sometimes these namespaces can get unconveniently long. This is where namespace aliases come in. Imagine you have a person class in 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 […]

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> […]

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 […]