Fri, 23 May 2025 12:44:24 +0200
make test-compile depend on both static and shared
the shared lib is not needed for the tests,
but when run with coverage, gcov will be confused
when outdated line information is available from
a previous shared build
1143
0559812df10c
assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents:
1142
diff
changeset
|
1 | # Formatting |
1141 | 2 | |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
3 | In the `printf.h` header you can find various useful `printf()`-like functions that can write the formatted output |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
4 | directly to an arbitrary stream or [buffer](buffer.h.md), or to memory allocated by an [allocator](allocator.h.md). |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
5 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
6 | With the help of these convenience functions, you do not need the libc `snprintf` to print your string to a temporary buffer anymore, |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
7 | plus you do not need to worry about too small buffer sizes, because the functions will automatically allocate enough memory to contain the entire formatted string. |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
8 | |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
9 | > Although UCX usually uses `size_t` for sizes, the return type of all `printf`-like functions |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
10 | > (except for the `cx_asprintf()` family of functions) is `int`, consistent with the stdio `printf` return type. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
11 | {style="note"} |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
12 | |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
13 | ## Print to Streams and Buffers |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
14 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
15 | ```C |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
16 | #include <cx/printf.h> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
17 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
18 | int cx_fprintf(void *stream, cx_write_func wfc, |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
19 | const char *fmt, ...); |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
20 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
21 | int cx_vfprintf(void *stream, cx_write_func wfc, |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
22 | const char *fmt, va_list ap); |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
23 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
24 | int cx_bprintf(CxBuffer *buf, const char *fmt, ...); |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
25 | ``` |
1146
151c057faf7c
add marker to every incomplete page
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
26 | |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
27 | The `cx_fprintf()` function uses the stdio `snprintf()` to prepare a formatted string |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
28 | which is then written to the `stream` using the write function `wfc`. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
29 | The return value is the number of bytes written or a value less than zero when an error occurred. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
30 | If the resulting string is short enough, no additional memory is allocated on the heap. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
31 | See the Section about [](#small-buffer-optimization) for more details. |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
32 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
33 | The `cx_vfprintf()` function is equivalent to `cx_fprintf()`, |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
34 | except that instead of being called with a variable number of arguments, |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
35 | it is called with an argument list as defined by `<stdarg.h>`. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
36 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
37 | The `cx_bprintf()` function is implemented as macro for `cx_fprintf()` with the |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
38 | `CxBuffer` as `stream` and the `cxBufferWriteFunc` as write function. |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
39 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
40 | ## Print to Freshly Allocated Memory |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
41 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
42 | ```C |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
43 | #include <cx/printf.h> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
44 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
45 | cxmutstr cx_asprintf(const char *fmt, ...); |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
46 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
47 | cxmutstr cx_asprintf_a(const CxAllocator *allocator, |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
48 | const char *fmt, ...); |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
49 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
50 | cxmutstr cx_vasprintf(const char *fmt, va_list ap); |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
51 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
52 | cxmutstr cx_vasprintf_a(const CxAllocator *allocator, |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
53 | const char *fmt, va_list ap); |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
54 | ``` |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
55 | |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
56 | The `cx_asprintf()` and `cx_asprintf_a()` functions print the formatted output directly to a freshly allocated |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
57 | string which is then returned from the function. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
58 | On platforms (or when using allocators) where allocation can fail, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
59 | the returned string may be empty and the `ptr` field set to `NULL`. |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
60 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
61 | The `cx_vasprintf()` and `cx_vasprintf_a()` functions are equivalent to `cx_asprintf()` and `cx_asprintf_a()`, |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
62 | except that instead of being called with a variable number of arguments, |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
63 | they are called with an argument list as defined by `<stdarg.h>`. |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
64 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
65 | ## Print to Existing Memory |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
66 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
67 | ```C |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
68 | #include <cx/printf.h> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
69 | |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
70 | int cx_sprintf(char **str, size_t *len, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
71 | const char *fmt, ...); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
72 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
73 | int cx_sprintf_a(CxAllocator *alloc, char **str, size_t *len, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
74 | const char *fmt, ...); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
75 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
76 | int cx_sprintf_s(char *buf, size_t *len, char **str, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
77 | const char *fmt, ...); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
78 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
79 | int cx_sprintf_sa(CxAllocator *alloc, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
80 | char *buf, size_t *len, char **str, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
81 | const char *fmt, ...); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
82 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
83 | int cx_vsprintf(char **str, size_t *len, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
84 | const char *fmt, va_list ap); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
85 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
86 | int cx_vsprintf_a(CxAllocator *alloc, char **str, size_t *len, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
87 | const char *fmt, va_list ap); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
88 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
89 | int cx_vsprintf_s(char *buf, size_t *len, char **str, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
90 | const char *fmt, ...); |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
91 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
92 | int cx_vsprintf_sa(CxAllocator *alloc, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
93 | char *buf, size_t *len, char **str, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
94 | const char *fmt, va_list ap); |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
95 | ``` |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
96 | |
1210
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
97 | The `cx_sprintf()` and `cx_sprintf_a()` functions take a pointer `str` to a pointer to a pre-allocated buffer, |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
98 | as well as a pointer `len` to `*str`'s length. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
99 | If the formatted output would not fit into this buffer, it is reallocated |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
100 | and the new pointer to the buffer and the new length are written back to the variables pointed to by `str` and `len`. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
101 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
102 | The `cx_sprintf_s()` and `cx_sprintf_sa()` functions differ from the previous function in that they take |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
103 | the pointer to the pre-allocated buffer in the `buf` argument and not in the `str` argument |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
104 | (which in this case is only used for storing the resulting pointer), and _always_ allocate an entirely new buffer |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
105 | when the length is insufficient. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
106 | This is particularly useful when you want to print the formatted string to a buffer allocated on the stack, but also |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
107 | want the option to switch to heap-allocated memory when necessary. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
108 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
109 | In other words: when the formatted output fits into the buffer pointed to by `buf`, `buf` will be written to `*str`. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
110 | Otherwise, the pointer to the freshly allocated buffer is written to `*str`. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
111 | |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
112 | > When using `cx_sprintf()` or `cx_sprintf_a()` you should always make sure that the string pointed to by `*str` |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
113 | > was allocated by a matching allocator. |
2ad0cf0f314b
complete the printf documentation and fix code formatting
Mike Becker <universe@uap-core.de>
parents:
1172
diff
changeset
|
114 | > This restriction does not apply for `cx_sprintf_s()` or `cx_sprintf_sa()` which would allocate a fresh buffer when needed. |
1172
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
115 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
116 | The `cx_vsprintf()`, `cx_vsprintf_a()`, `cx_vsprintf_s()`, and `cx_vsprintf_sa()` functions are equivalent |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
117 | to `cx_sprintf()`, `cx_sprintf_a()`, `cx_sprintf_s()`, and `cx_sprintf_sa()`, |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
118 | except that instead of being called with a variable number of arguments, |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
119 | they are called with an argument list as defined by `<stdarg.h>`. |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
120 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
121 | ## Small Buffer Optimization |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
122 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
123 | All functions that allocate internal temporary memory use small buffer optimization to avoid a heap allocation |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
124 | if the expected string length is smaller than `cx_printf_sbo_size`. |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
125 | This size cannot be changed at runtime, but modified by defining the `CX_PRINTF_SBO_SIZE` macro when [building](install.md#small-buffer-optimizations) the library. |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
126 | |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
127 | <seealso> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
128 | <category ref="apidoc"> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
129 | <a href="https://ucx.sourceforge.io/api/printf_8h.html">printf.h</a> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
130 | </category> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
131 | </seealso> |
1a6aa0301226
basic structure for printf documentation
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
132 |