A structure parameter receives a copy of the structure value. A function can change that parameter’s members, but those changes do not alter the caller’s original object. section 6.3
Compute a day-of-year value
In `struct tm time_set_yday(struct tm t)`, the function updates `t.tm_yday`, accounts for leap years, and returns the modified structure. The caller must write `today = time_set_yday(today);` to retain the result. Passing the structure does not provide an in-place update. section 6.3
Listing 6.3. A sample program manipulating struct tm
1 #include <time.h>
2 #include <stdbool.h>
3 #include <stdio.h>
4
5 bool leapyear(unsigned year) {
6 /* All years that are divisible by 4 are leap years,
7 unless they start a new century, provided they
8 are not divisible by 400. */
9 return !(year % 4) && ((year % 100) || !(year % 400));
10 }
11
12 #define DAYS_BEFORE \
13 (int const[12]){ \
14 [0] = 0, [1] = 31, [2] = 59, [3] = 90, \
15 [4] = 120, [5] = 151, [6] = 181, [7] = 212, \
16 [8] = 243, [9] = 273, [10] = 304, [11] = 334, \
17 }
18
19 struct tm time_set_yday(struct tm t) {
20 // tm_mdays starts at 1.
21 t.tm_yday += DAYS_BEFORE[t.tm_mon] + t.tm_mday - 1;
22 // Takes care of leap years
23 if ((t.tm_mon > 1) && leapyear(t.tm_year+1900))
24 ++t.tm_yday;
25 return t;
26 }
27
28 int main(void) {
29 struct tm today = {
30 .tm_year = 2019-1900,
31 .tm_mon = 4-1,
32 .tm_mday = 3,
33 .tm_hour = 10,
34 .tm_min = 0,
35 .tm_sec = 47,
36 };
37 printf("this year is %d, next year will be %d\n",
38 today.tm_year+1900, today.tm_year+1900+1);
39 today = time_set_yday(today);
40 printf("day of the year is %d\n", today.tm_yday);
41 }
!@%STYLE%@!
{"css":"{\"css\": \"font-weight: bold;\"}","target":"[[{\"line\":0,\"ch\":1},{\"line\":0,\"ch\":2}],[{\"line\":8,\"ch\":38},{\"line\":8,\"ch\":39}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":1}],[{\"line\":10,\"ch\":0},{\"line\":10,\"ch\":1}],[{\"line\":11,\"ch\":0},{\"line\":11,\"ch\":1}],[{\"line\":12,\"ch\":0},{\"line\":12,\"ch\":1}],[{\"line\":13,\"ch\":0},{\"line\":13,\"ch\":1}],[{\"line\":14,\"ch\":0},{\"line\":14,\"ch\":1}],[{\"line\":15,\"ch\":0},{\"line\":15,\"ch\":1}],[{\"line\":16,\"ch\":0},{\"line\":16,\"ch\":1}],[{\"line\":17,\"ch\":0},{\"line\":17,\"ch\":1}],[{\"line\":18,\"ch\":0},{\"line\":18,\"ch\":1}],[{\"line\":19,\"ch\":29},{\"line\":19,\"ch\":30}],[{\"line\":20,\"ch\":1},{\"line\":20,\"ch\":2}],[{\"line\":22,\"ch\":23},{\"line\":22,\"ch\":24}],[{\"line\":29,\"ch\":22},{\"line\":29,\"ch\":23}],[{\"line\":30,\"ch\":1},{\"line\":30,\"ch\":2}],[{\"line\":32,\"ch\":20},{\"line\":32,\"ch\":21}],[{\"line\":37,\"ch\":28},{\"line\":37,\"ch\":29}],[{\"line\":40,\"ch\":1},{\"line\":40,\"ch\":2}],[{\"line\":0,\"ch\":5},{\"line\":0,\"ch\":13}],[{\"line\":1,\"ch\":5},{\"line\":1,\"ch\":13}],[{\"line\":2,\"ch\":5},{\"line\":2,\"ch\":13}],[{\"line\":0,\"ch\":15},{\"line\":0,\"ch\":19}],[{\"line\":18,\"ch\":15},{\"line\":18,\"ch\":19}],[{\"line\":38,\"ch\":15},{\"line\":38,\"ch\":19}],[{\"line\":1,\"ch\":1},{\"line\":1,\"ch\":2}],[{\"line\":11,\"ch\":1},{\"line\":11,\"ch\":2}],[{\"line\":12,\"ch\":17},{\"line\":12,\"ch\":18}],[{\"line\":13,\"ch\":27},{\"line\":13,\"ch\":28}],[{\"line\":14,\"ch\":14},{\"line\":14,\"ch\":15}],[{\"line\":15,\"ch\":13},{\"line\":15,\"ch\":14}],[{\"line\":19,\"ch\":0},{\"line\":19,\"ch\":1}],[{\"line\":20,\"ch\":0},{\"line\":20,\"ch\":1}],[{\"line\":21,\"ch\":0},{\"line\":21,\"ch\":1}],[{\"line\":22,\"ch\":0},{\"line\":22,\"ch\":1}],[{\"line\":23,\"ch\":0},{\"line\":23,\"ch\":1}],[{\"line\":24,\"ch\":0},{\"line\":24,\"ch\":1}],[{\"line\":25,\"ch\":0},{\"line\":25,\"ch\":1}],[{\"line\":26,\"ch\":0},{\"line\":26,\"ch\":1}],[{\"line\":27,\"ch\":0},{\"line\":27,\"ch\":1}],[{\"line\":28,\"ch\":0},{\"line\":28,\"ch\":1}],[{\"line\":29,\"ch\":20},{\"line\":29,\"ch\":21}],[{\"line\":31,\"ch\":1},{\"line\":31,\"ch\":2}],[{\"line\":0,\"ch\":5},{\"line\":0,\"ch\":13}],[{\"line\":1,\"ch\":5},{\"line\":1,\"ch\":13}],[{\"line\":2,\"ch\":5},{\"line\":2,\"ch\":13}],[{\"line\":2,\"ch\":1},{\"line\":2,\"ch\":2}],[{\"line\":12,\"ch\":1},{\"line\":12,\"ch\":2}],[{\"line\":13,\"ch\":22},{\"line\":13,\"ch\":23}],[{\"line\":15,\"ch\":15},{\"line\":15,\"ch\":16}],[{\"line\":22,\"ch\":1},{\"line\":22,\"ch\":2}],[{\"line\":29,\"ch\":0},{\"line\":29,\"ch\":1}],[{\"line\":30,\"ch\":0},{\"line\":30,\"ch\":1}],[{\"line\":31,\"ch\":0},{\"line\":31,\"ch\":1}],[{\"line\":32,\"ch\":0},{\"line\":32,\"ch\":1}],[{\"line\":33,\"ch\":0},{\"line\":33,\"ch\":1}],[{\"line\":34,\"ch\":0},{\"line\":34,\"ch\":1}],[{\"line\":35,\"ch\":0},{\"line\":35,\"ch\":1}],[{\"line\":36,\"ch\":0},{\"line\":36,\"ch\":1}],[{\"line\":37,\"ch\":0},{\"line\":37,\"ch\":1}],[{\"line\":38,\"ch\":0},{\"line\":38,\"ch\":1}],[{\"line\":0,\"ch\":5},{\"line\":0,\"ch\":13}],[{\"line\":1,\"ch\":5},{\"line\":1,\"ch\":13}],[{\"line\":2,\"ch\":5},{\"line\":2,\"ch\":13}],[{\"line\":3,\"ch\":1},{\"line\":3,\"ch\":2}],[{\"line\":5,\"ch\":42},{\"line\":5,\"ch\":43}],[{\"line\":7,\"ch\":31},{\"line\":7,\"ch\":32}],[{\"line\":8,\"ch\":23},{\"line\":8,\"ch\":24}],[{\"line\":13,\"ch\":1},{\"line\":13,\"ch\":2}],[{\"line\":14,\"ch\":8},{\"line\":14,\"ch\":9}],[{\"line\":15,\"ch\":14},{\"line\":15,\"ch\":15}],[{\"line\":23,\"ch\":1},{\"line\":23,\"ch\":2}],[{\"line\":30,\"ch\":20},{\"line\":30,\"ch\":21}],[{\"line\":33,\"ch\":1},{\"line\":33,\"ch\":2}],[{\"line\":34,\"ch\":20},{\"line\":34,\"ch\":21}],[{\"line\":39,\"ch\":0},{\"line\":39,\"ch\":1}],[{\"line\":40,\"ch\":0},{\"line\":40,\"ch\":1}],[{\"line\":4,\"ch\":1},{\"line\":4,\"ch\":2}],[{\"line\":13,\"ch\":32},{\"line\":13,\"ch\":33}],[{\"line\":14,\"ch\":1},{\"line\":14,\"ch\":2}],[{\"line\":24,\"ch\":1},{\"line\":24,\"ch\":2}],[{\"line\":34,\"ch\":1},{\"line\":34,\"ch\":2}],[{\"line\":4,\"ch\":19},{\"line\":4,\"ch\":27}],[{\"line\":5,\"ch\":1},{\"line\":5,\"ch\":2}],[{\"line\":14,\"ch\":30},{\"line\":14,\"ch\":31}],[{\"line\":15,\"ch\":1},{\"line\":15,\"ch\":2}],[{\"line\":25,\"ch\":1},{\"line\":25,\"ch\":2}],[{\"line\":35,\"ch\":1},{\"line\":35,\"ch\":2}],[{\"line\":6,\"ch\":1},{\"line\":6,\"ch\":2}],[{\"line\":14,\"ch\":41},{\"line\":14,\"ch\":42}],[{\"line\":15,\"ch\":25},{\"line\":15,\"ch\":26}],[{\"line\":16,\"ch\":1},{\"line\":16,\"ch\":2}],[{\"line\":26,\"ch\":1},{\"line\":26,\"ch\":2}],[{\"line\":34,\"ch\":21},{\"line\":34,\"ch\":22}],[{\"line\":36,\"ch\":1},{\"line\":36,\"ch\":2}],[{\"line\":7,\"ch\":1},{\"line\":7,\"ch\":2}],[{\"line\":14,\"ch\":36},{\"line\":14,\"ch\":37}],[{\"line\":15,\"ch\":8},{\"line\":15,\"ch\":9}],[{\"line\":17,\"ch\":1},{\"line\":17,\"ch\":2}],[{\"line\":27,\"ch\":1},{\"line\":27,\"ch\":2}],[{\"line\":37,\"ch\":1},{\"line\":37,\"ch\":2}],[{\"line\":8,\"ch\":1},{\"line\":8,\"ch\":2}],[{\"line\":13,\"ch\":33},{\"line\":13,\"ch\":34}],[{\"line\":15,\"ch\":19},{\"line\":15,\"ch\":20}],[{\"line\":18,\"ch\":1},{\"line\":18,\"ch\":2}],[{\"line\":22,\"ch\":49},{\"line\":22,\"ch\":50}],[{\"line\":28,\"ch\":1},{\"line\":28,\"ch\":2}],[{\"line\":29,\"ch\":23},{\"line\":29,\"ch\":24}],[{\"line\":37,\"ch\":29},{\"line\":37,\"ch\":30}],[{\"line\":38,\"ch\":1},{\"line\":38,\"ch\":2}],[{\"line\":8,\"ch\":7},{\"line\":8,\"ch\":13}],[{\"line\":24,\"ch\":7},{\"line\":24,\"ch\":13}],[{\"line\":8,\"ch\":38},{\"line\":8,\"ch\":40}],[{\"line\":9,\"ch\":0},{\"line\":9,\"ch\":2}],[{\"line\":15,\"ch\":30},{\"line\":15,\"ch\":32}],[{\"line\":32,\"ch\":20},{\"line\":32,\"ch\":22}],[{\"line\":10,\"ch\":0},{\"line\":10,\"ch\":2}],[{\"line\":15,\"ch\":42},{\"line\":15,\"ch\":44}],[{\"line\":11,\"ch\":0},{\"line\":11,\"ch\":2}],[{\"line\":12,\"ch\":16},{\"line\":12,\"ch\":18}],[{\"line\":14,\"ch\":13},{\"line\":14,\"ch\":15}],[{\"line\":11,\"ch\":5},{\"line\":11,\"ch\":12}],[{\"line\":12,\"ch\":0},{\"line\":12,\"ch\":2}],[{\"line\":12,\"ch\":6},{\"line\":12,\"ch\":15}],[{\"line\":13,\"ch\":0},{\"line\":13,\"ch\":2}],[{\"line\":14,\"ch\":0},{\"line\":14,\"ch\":2}],[{\"line\":15,\"ch\":0},{\"line\":15,\"ch\":2}],[{\"line\":16,\"ch\":0},{\"line\":16,\"ch\":2}],[{\"line\":14,\"ch\":35},{\"line\":14,\"ch\":37}],[{\"line\":17,\"ch\":0},{\"line\":17,\"ch\":2}],[{\"line\":18,\"ch\":0},{\"line\":18,\"ch\":2}],[{\"line\":22,\"ch\":48},{\"line\":22,\"ch\":50}],[{\"line\":29,\"ch\":22},{\"line\":29,\"ch\":24}],[{\"line\":37,\"ch\":28},{\"line\":37,\"ch\":30}],[{\"line\":18,\"ch\":5},{\"line\":18,\"ch\":11}],[{\"line\":28,\"ch\":7},{\"line\":28,\"ch\":13}],[{\"line\":18,\"ch\":12},{\"line\":18,\"ch\":14}],[{\"line\":19,\"ch\":10},{\"line\":19,\"ch\":12}],[{\"line\":20,\"ch\":9},{\"line\":20,\"ch\":11}],[{\"line\":22,\"ch\":14},{\"line\":22,\"ch\":16}],[{\"line\":23,\"ch\":13},{\"line\":23,\"ch\":15}],[{\"line\":28,\"ch\":14},{\"line\":28,\"ch\":16}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":12}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":12}],[{\"line\":31,\"ch\":10},{\"line\":31,\"ch\":12}],[{\"line\":32,\"ch\":10},{\"line\":32,\"ch\":12}],[{\"line\":33,\"ch\":10},{\"line\":33,\"ch\":12}],[{\"line\":34,\"ch\":10},{\"line\":34,\"ch\":12}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":22}],[{\"line\":39,\"ch\":47},{\"line\":39,\"ch\":49}],[{\"line\":18,\"ch\":5},{\"line\":18,\"ch\":11}],[{\"line\":28,\"ch\":7},{\"line\":28,\"ch\":13}],[{\"line\":18,\"ch\":12},{\"line\":18,\"ch\":14}],[{\"line\":19,\"ch\":10},{\"line\":19,\"ch\":12}],[{\"line\":20,\"ch\":9},{\"line\":20,\"ch\":11}],[{\"line\":22,\"ch\":14},{\"line\":22,\"ch\":16}],[{\"line\":23,\"ch\":13},{\"line\":23,\"ch\":15}],[{\"line\":28,\"ch\":14},{\"line\":28,\"ch\":16}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":12}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":12}],[{\"line\":31,\"ch\":10},{\"line\":31,\"ch\":12}],[{\"line\":32,\"ch\":10},{\"line\":32,\"ch\":12}],[{\"line\":33,\"ch\":10},{\"line\":33,\"ch\":12}],[{\"line\":34,\"ch\":10},{\"line\":34,\"ch\":12}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":22}],[{\"line\":39,\"ch\":47},{\"line\":39,\"ch\":49}],[{\"line\":14,\"ch\":14},{\"line\":14,\"ch\":16}],[{\"line\":19,\"ch\":0},{\"line\":19,\"ch\":2}],[{\"line\":29,\"ch\":20},{\"line\":29,\"ch\":22}],[{\"line\":14,\"ch\":46},{\"line\":14,\"ch\":48}],[{\"line\":20,\"ch\":0},{\"line\":20,\"ch\":2}],[{\"line\":20,\"ch\":9},{\"line\":20,\"ch\":16}],[{\"line\":23,\"ch\":13},{\"line\":23,\"ch\":20}],[{\"line\":39,\"ch\":47},{\"line\":39,\"ch\":54}],[{\"line\":20,\"ch\":34},{\"line\":20,\"ch\":40}],[{\"line\":22,\"ch\":14},{\"line\":22,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":16}],[{\"line\":19,\"ch\":10},{\"line\":19,\"ch\":17}],[{\"line\":20,\"ch\":46},{\"line\":20,\"ch\":53}],[{\"line\":31,\"ch\":10},{\"line\":31,\"ch\":17}],[{\"line\":21,\"ch\":0},{\"line\":21,\"ch\":2}],[{\"line\":22,\"ch\":0},{\"line\":22,\"ch\":2}],[{\"line\":22,\"ch\":7},{\"line\":22,\"ch\":9}],[{\"line\":20,\"ch\":34},{\"line\":20,\"ch\":40}],[{\"line\":22,\"ch\":14},{\"line\":22,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":16}],[{\"line\":22,\"ch\":40},{\"line\":22,\"ch\":47}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":17}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":27}],[{\"line\":15,\"ch\":13},{\"line\":15,\"ch\":15}],[{\"line\":23,\"ch\":0},{\"line\":23,\"ch\":2}],[{\"line\":20,\"ch\":9},{\"line\":20,\"ch\":16}],[{\"line\":23,\"ch\":13},{\"line\":23,\"ch\":20}],[{\"line\":39,\"ch\":47},{\"line\":39,\"ch\":54}],[{\"line\":24,\"ch\":0},{\"line\":24,\"ch\":2}],[{\"line\":8,\"ch\":7},{\"line\":8,\"ch\":13}],[{\"line\":24,\"ch\":7},{\"line\":24,\"ch\":13}],[{\"line\":25,\"ch\":0},{\"line\":25,\"ch\":2}],[{\"line\":15,\"ch\":24},{\"line\":15,\"ch\":26}],[{\"line\":26,\"ch\":0},{\"line\":26,\"ch\":2}],[{\"line\":27,\"ch\":0},{\"line\":27,\"ch\":2}],[{\"line\":12,\"ch\":6},{\"line\":12,\"ch\":9}],[{\"line\":27,\"ch\":5},{\"line\":27,\"ch\":8}],[{\"line\":36,\"ch\":9},{\"line\":36,\"ch\":12}],[{\"line\":39,\"ch\":9},{\"line\":39,\"ch\":12}],[{\"line\":27,\"ch\":9},{\"line\":27,\"ch\":13}],[{\"line\":27,\"ch\":14},{\"line\":27,\"ch\":18}],[{\"line\":28,\"ch\":0},{\"line\":28,\"ch\":2}],[{\"line\":18,\"ch\":5},{\"line\":18,\"ch\":11}],[{\"line\":28,\"ch\":7},{\"line\":28,\"ch\":13}],[{\"line\":18,\"ch\":12},{\"line\":18,\"ch\":14}],[{\"line\":19,\"ch\":10},{\"line\":19,\"ch\":12}],[{\"line\":20,\"ch\":9},{\"line\":20,\"ch\":11}],[{\"line\":22,\"ch\":14},{\"line\":22,\"ch\":16}],[{\"line\":23,\"ch\":13},{\"line\":23,\"ch\":15}],[{\"line\":28,\"ch\":14},{\"line\":28,\"ch\":16}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":12}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":12}],[{\"line\":31,\"ch\":10},{\"line\":31,\"ch\":12}],[{\"line\":32,\"ch\":10},{\"line\":32,\"ch\":12}],[{\"line\":33,\"ch\":10},{\"line\":33,\"ch\":12}],[{\"line\":34,\"ch\":10},{\"line\":34,\"ch\":12}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":22}],[{\"line\":39,\"ch\":47},{\"line\":39,\"ch\":49}],[{\"line\":15,\"ch\":36},{\"line\":15,\"ch\":38}],[{\"line\":29,\"ch\":0},{\"line\":29,\"ch\":2}],[{\"line\":22,\"ch\":40},{\"line\":22,\"ch\":47}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":17}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":27}],[{\"line\":13,\"ch\":22},{\"line\":13,\"ch\":24}],[{\"line\":30,\"ch\":0},{\"line\":30,\"ch\":2}],[{\"line\":20,\"ch\":34},{\"line\":20,\"ch\":40}],[{\"line\":22,\"ch\":14},{\"line\":22,\"ch\":20}],[{\"line\":30,\"ch\":10},{\"line\":30,\"ch\":16}],[{\"line\":31,\"ch\":0},{\"line\":31,\"ch\":2}],[{\"line\":19,\"ch\":10},{\"line\":19,\"ch\":17}],[{\"line\":20,\"ch\":46},{\"line\":20,\"ch\":53}],[{\"line\":31,\"ch\":10},{\"line\":31,\"ch\":17}],[{\"line\":15,\"ch\":48},{\"line\":15,\"ch\":50}],[{\"line\":32,\"ch\":0},{\"line\":32,\"ch\":2}],[{\"line\":32,\"ch\":10},{\"line\":32,\"ch\":17}],[{\"line\":15,\"ch\":49},{\"line\":15,\"ch\":51}],[{\"line\":33,\"ch\":0},{\"line\":33,\"ch\":2}],[{\"line\":33,\"ch\":10},{\"line\":33,\"ch\":16}],[{\"line\":34,\"ch\":0},{\"line\":34,\"ch\":2}],[{\"line\":34,\"ch\":10},{\"line\":34,\"ch\":16}],[{\"line\":35,\"ch\":0},{\"line\":35,\"ch\":2}],[{\"line\":36,\"ch\":0},{\"line\":36,\"ch\":2}],[{\"line\":36,\"ch\":7},{\"line\":36,\"ch\":13}],[{\"line\":39,\"ch\":7},{\"line\":39,\"ch\":13}],[{\"line\":37,\"ch\":0},{\"line\":37,\"ch\":2}],[{\"line\":22,\"ch\":40},{\"line\":22,\"ch\":47}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":17}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":27}],[{\"line\":22,\"ch\":40},{\"line\":22,\"ch\":47}],[{\"line\":29,\"ch\":10},{\"line\":29,\"ch\":17}],[{\"line\":37,\"ch\":20},{\"line\":37,\"ch\":27}],[{\"line\":38,\"ch\":0},{\"line\":38,\"ch\":2}],[{\"line\":7,\"ch\":31},{\"line\":7,\"ch\":33}],[{\"line\":8,\"ch\":55},{\"line\":8,\"ch\":57}],[{\"line\":39,\"ch\":0},{\"line\":39,\"ch\":2}],[{\"line\":36,\"ch\":7},{\"line\":36,\"ch\":13}],[{\"line\":39,\"ch\":7},{\"line\":39,\"ch\":13}],[{\"line\":20,\"ch\":9},{\"line\":20,\"ch\":16}],[{\"line\":23,\"ch\":13},{\"line\":23,\"ch\":20}],[{\"line\":39,\"ch\":47},{\"line\":39,\"ch\":54}],[{\"line\":40,\"ch\":0},{\"line\":40,\"ch\":2}]]"}
!@%STYLE%@!
Inspect the complete `struct tm` program, including the structure parameter, its member updates, return value, and caller-side reassignment. section 6.3
TAKEAWAY
- Use the returned structure when a function changes a structure parameter. section 6.3
- Structure values support assignment with `=`, but not comparison with `==` or `!=`. section 6.3
