from functools import reduce, wraps
def silenced(*exceptions, typed=False):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
try:
return f(*args, **kwargs)
except exceptions as exc:
if typed:
return exc.__class__
return None
return wrapper
return decorator
@silenced(IndexError, KeyError)
def item_getter(container, key):
if container is not None:
return container[key]
exampe = {
'Building': {
'Flat': {
'Flat_1': {
'App_1': 3,
'App_2': 5
},
'Flat_2': {
'App_3': 1,
'App_4': 3
}
}
}
}
path = ['Building', 'Flat', 'Flat_2', 'App_4']
value = reduce(item_getter, path, example)
print(value)
printf
находится в библиотеке libmsvcrt.a
. Чтобы иметь возможность использовать printf
, нужно слинковать test.o
с libmsvcrt.a
. Впрочем, этим дело не ограничивается, чтобы хотя бы запустить программу, необходимо очень много вспомогательного кода. Параметры линковщика могут выглядеть примерно так для обычного "hello world":ld -LC:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0
-LC:/MinGW/x64/mingw64/bin/../lib/gcc
-LC:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/lib/../lib
-LC:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../lib
-LC:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/lib
-LC:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../..
C:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o
C:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/crtbegin.o
test.o
-lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32
-luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt
C:/MinGW/x64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/crtend.o
#include <stdio.h>
#include <string.h>
#include <pcre.h>
#define DATE_SIZE 11
int main(int argc, char* argv[]) {
pcre *pattern;
const char *error_str;
int error_offset;
int matches[1];
pattern = pcre_compile("^\\d{2}\\.\\d{2}\\.\\d{4}$", 0, &error_str, &error_offset, NULL);
if(pattern == NULL) {
printf("Could not compile: %s\n", error_str);
return 1;
}
char str[DATE_SIZE];
fgets(str, DATE_SIZE, stdin);
int r = pcre_exec(pattern, NULL, str, strlen(str), 0, 0, matches, 1);
pcre_free(pattern);
if (r < 0)
puts("Invalid date");
else
puts("Valid date");
return EXIT_SUCCESS;
}
Или есть такие люди как я?
Как вы боритесь с синдромом самобичевания.