#include <stdio.h>
typedef struct params_ {
unsigned long long operand1, operand2;
unsigned long long value1;
int operation;
} params_t;
int foo(struct params_* p) {
int retcode = 0;
// do something with p along operation
if(p->operation == 0) {
p->value1 = 100 * p->operand1 + p->operand2;
}
else if(p->operation == 1) {
// ...
}
// ...
else {
retcode = -1;
}
return retcode;
}
int main(void) {
params_t params;
params.operation = 0;
params.operand1 = 5;
params.operand2 = 42;
if(foo(¶ms) < 0) {
// Error occurred
}
unsigned long long result = params.value1;
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdCBwYXJhbXNfIHsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvcGVyYW5kMSwgb3BlcmFuZDI7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUxOwogICAgaW50IG9wZXJhdGlvbjsKfSBwYXJhbXNfdDsKCmludCBmb28oc3RydWN0IHBhcmFtc18qIHApIHsKICAgIGludCByZXRjb2RlID0gMDsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHAgYWxvbmcgb3BlcmF0aW9uCiAgICBpZihwLT5vcGVyYXRpb24gPT0gMCkgewogICAgICAgIHAtPnZhbHVlMSA9IDEwMCAqIHAtPm9wZXJhbmQxICsgcC0+b3BlcmFuZDI7CiAgICB9CiAgICBlbHNlIGlmKHAtPm9wZXJhdGlvbiA9PSAxKSB7CiAgICAgICAvLyAuLi4KICAgIH0KICAgIC8vIC4uLgogICAgZWxzZSB7CiAgICAgICAgcmV0Y29kZSA9IC0xOwogICAgfQogICAgcmV0dXJuIHJldGNvZGU7Cn0KCmludCBtYWluKHZvaWQpIHsKCXBhcmFtc190IHBhcmFtczsKCXBhcmFtcy5vcGVyYXRpb24gPSAwOwoJcGFyYW1zLm9wZXJhbmQxID0gNTsKCXBhcmFtcy5vcGVyYW5kMiA9IDQyOwoJaWYoZm9vKCZwYXJhbXMpIDwgMCkgewoJICAgIC8vIEVycm9yIG9jY3VycmVkCgl9Cgl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0ID0gcGFyYW1zLnZhbHVlMTsKCXJldHVybiAwOwp9Cg==