message msg;
msg.from(mail_address("mailio library", "mailio@gmail.com"));
msg.add_recipient(mail_address("mailio library", "mailio@gmail.com"));
msg.subject("smtps simple message");
msg.content("Hello, World!");
smtps conn("smtp.gmail.com", 587);
conn.authenticate("mailio@gmail.com", "mailiopass", smtps::auth_method_t::START_TLS);
conn.submit(msg);
это многословно? Simplex simplex = *(new Simplex());
// Когда не хочется придумывать новое имя другой переменной, которая точно такая же по смыслу.
// И хочется дать ей константность - ее менять я не собираюсь, в смысле изменчивости переменной.
const bool ok = foo1();
if (!ok)
return;
{
const bool ok = foo2();
if (!ok)
return;
}
// Когда надо защитить мьютексом изменение переменной, на как можно более короткое время.
... некий код
{
const std::lock_guard<std::mutex> lock(_mutex);
++i;
// _mutex is automatically released when lock goes out of scope
}
... продолжаем код
#pragma comment (lib,"Ws2_32.lib")
#include <winsock2.h>
#include <WS2tcpip.h>
#include <Windows.h>
#include <iostream>
#include <string>
int main() {
WSADATA wsa;
std::string domain;
int status;
struct addrinfo hints = { 0 }, * res, * p;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
// ошибки выводятся в ANSI кодировке, а консоль по умолчанию в OEM
SetConsoleCP(GetACP());
SetConsoleOutputCP(GetACP());
// На Windows необходима инициализация сетевой библиотеки
if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
std::cout << "Error: of getaddrinfo: " << get_error_message(status) << std::endl;
// принято возвращать причину ошибки, а не только сам факт
return status;
}
std::cout << ("Enter domain: ");
// даже доменные имена могут иметь длину 256 символов
// пользователь же может вообще ввести сколько ему угодно
std::getline(std::cin, domain);
if (status = getaddrinfo(domain.c_str(), "80", &hints, &res) != 0) {
std::cout << "Error: of getaddrinfo: " << get_error_message(status) << std::endl;
return status;
};
char ipstr[INET6_ADDRSTRLEN];
for (p = res; p != NULL; p = p->ai_next) {
/*const char* ipver;*/
void* addr;
if (p->ai_family == AF_INET) {
struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
addr = &(ipv4->sin_addr);
/*ipver = "IPv4:";*/
}
else {
struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
addr = &(ipv6->sin6_addr);
/*ipver = "IPv6:";*/
}
inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
std::cout << "addres: " << ipstr << std::endl;
};
freeaddrinfo(res);
system("pause");
// деструктор сетевой библиотеки
WSACleanup();
return 0;
}
vabka@DESKTOP-7AFIA69:~/repos$ time (python3 test.py) 2>&1 1>/dev/null
real 0m0.381s
user 0m0.359s
sys 0m0.016s
vabka@DESKTOP-7AFIA69:~/repos$ time (tcc -run test.c) 2>&1 1>/dev/null
real 0m0.081s
user 0m0.047s
sys 0m0.031s
vabka@DESKTOP-7AFIA69:~/repos$ cat test.c
#include <stdio.h>
int main() {
int i = 0;
while(i < 1000000) {
printf("%d\n", i);
i++;
}
return 0;
}
vabka@DESKTOP-7AFIA69:~/repos$ cat test.py
i = 0
while i < 1000000:
print(i)
i += 1
vabka@DESKTOP-7AFIA69:~/repos$
real 0m58.757s
user 0m1.094s
sys 0m11.078s
real 1m1.762s
user 0m2.953s
sys 0m13.594s
1=1; DROP TABLE Database;
что будет? Написал #include math.h
#include "math.h"?