41 lines
968 B
Markdown
41 lines
968 B
Markdown
# inline-c
|
||
|
||
is a simple module for defining C code inside Carp code.
|
||
|
||
## Installation
|
||
|
||
```clojure
|
||
(load "https://veitheller.de/git/carpentry/inline-c@0.0.3")
|
||
```
|
||
|
||
## Usage
|
||
|
||
This module only provides one function, `inline-c` (it is a macro, actually
|
||
:shrug:). This function enables you to write C code inline as a string, to
|
||
express those things that are just kind of awkward in Carp (like complex
|
||
bit-twiddling) without having to include a helper every time.
|
||
|
||
```clojure
|
||
(load "https://veitheller.de/git/carpentry/inline-c@0.0.3")
|
||
|
||
(inline-c "int count_set_bits(int n) {
|
||
int count = 0;
|
||
while (n) {
|
||
count += n & 1;
|
||
n >>= 1;
|
||
}
|
||
return count;
|
||
}")
|
||
(register count-set-bits (Fn [Int] Int) "count_set_bits")
|
||
|
||
(defn main [] (println* &(count-set-bits 462)))
|
||
```
|
||
|
||
The function is safe to be called multiple times, but it’s better to not call
|
||
it at all if it’s avoidable. Inlining your C in Carp does not magically make it
|
||
safe, naturally.
|
||
|
||
<hr/>
|
||
|
||
Have fun!
|