32 lines
1.2 KiB
Markdown
32 lines
1.2 KiB
Markdown
+++
|
||
title = "preprocessing"
|
||
draft = false
|
||
tags = [
|
||
"",
|
||
"Users",
|
||
"jefklak",
|
||
"Downloads",
|
||
"pages",
|
||
"code",
|
||
"c",
|
||
"preprocessing"
|
||
]
|
||
date = "2013-12-02"
|
||
+++
|
||
# Preprocessing
|
||
|
||
## Handige macro's
|
||
|
||
##### Exception/Debug informatie expanden
|
||
|
||
```c++
|
||
#define _ERROR_STR2(a) #a
|
||
#define _ERROR_STR(a) _ERROR_STR2(a)
|
||
#define ERROR_INFO(fn) _T(_ERROR_STR(__FILE__" line: "__LINE__" function: "fn))
|
||
```
|
||
|
||
Te gebruiken als `someFn(ERROR_INFO("bla"))`. Merk op dat `__FUNCTION__` of `__FUNC__` ook gebruikt kan worden, afhankelijk van de C++ compiler, maar dit is geen deel van de standaard (vanaf C++ v11).
|
||
|
||
De `#a` notatie wordt gebruikt om iets te [stringifyen](http://gcc.gnu.org/onlinedocs/cpp/Stringification.html) in de preprocessor, vandaar de delegate:
|
||
|
||
> Sometimes you may want to convert a macro argument into a string constant. Parameters are not replaced inside string constants, but you can use the ‘#’ preprocessing operator instead. When a macro parameter is used with a leading ‘#’, the preprocessor replaces it with the literal text of the actual argument, converted to a string constant. Unlike normal parameter replacement, the argument is not macro-expanded first. This is called stringification. |