summaryrefslogtreecommitdiff
path: root/ccan/alignof/_info
blob: e0952c652810b5a3cdadd0597d2e9aa74ec003ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "config.h"
#include <stdio.h>
#include <string.h>

/**
 * alignof - ALIGNOF() macro to determine alignment of a type.
 *
 * Many platforms have requirements that certain types must be aligned
 * to certain address boundaries, such as ints needing to be on 4-byte
 * boundaries.  Attempting to access variables with incorrect
 * alignment may cause performance loss or even program failure (eg. a
 * bus signal).
 *
 * There are times which it's useful to be able to programatically
 * access these requirements, such as for dynamic allocators.
 *
 * Example:
 *	#include <stdio.h>
 *	#include <stdlib.h>
 *	#include <ccan/alignof/alignof.h>
 *
 *	// Output contains "ALIGNOF(char) == 1"
 *	// Will also print out whether an onstack char array can hold a long.
 *	int main(int argc, char *argv[])
 *	{
 *		char arr[sizeof(int)];
 *
 *		printf("ALIGNOF(char) == %zu\n", ALIGNOF(char));
 *		if ((unsigned long)arr % ALIGNOF(int)) {
 *			printf("arr %p CANNOT hold an int\n", arr);
 *			exit(1);
 *		} else {
 *			printf("arr %p CAN hold an int\n", arr);
 *			exit(0);
 *		}
 *	}
 *
 * License: CC0 (Public domain)
 * Author: Rusty Russell <rusty@rustcorp.com.au>
 */
int main(int argc, char *argv[])
{
	if (argc != 2)
		return 1;

	if (strcmp(argv[1], "depends") == 0) {
		return 0;
	}

	return 1;
}