#c_language #algorithms
Реализация алгоритма сортировки пузырьком на языке Си:
Реализация алгоритма сортировки пузырьком на языке Си:
#define SWAP(A, B) { int t = A; A = B; B = t; }
void bubblesort(int *a, int n)
{
int j, nn;
do {
nn = 0;
for (j = 1; j < n; ++j)
if (a[j-1] > a[j]) {
SWAP( a[j-1], a[j] );
nn = j;
}
n = nn;
} while (n);
}
С-трюк: Расчет времени между событиями
Фрагмент кода для расчета времени, прошедшего между двумя событиями (к примеру, чтобы выяснить, сколько времени займет выполнение чего-либо).
Фрагмент кода для расчета времени, прошедшего между двумя событиями (к примеру, чтобы выяснить, сколько времени займет выполнение чего-либо).
#include "stdafx.h"
#include <time.h>
#include <windows.h>
#include <stdlib.h>
clock_t startm, stopm;
#define BEGIN if ( (startm = clock()) == -1) \
{ \
printf("clock returned error.");exit(1); \
} \
#define CLOSE if ( (stopm = clock()) == -1) \
{printf("clock returned error."); \
exit(1); \
} \
#define SHOWTIME printf( "%6.3f seconds elapsed.", ((double)stopm-startm)/CLOCKS_PER_SEC);
main() {
BEGIN;
// Specify set of instructions for you want to measure execution time
Sleep(10);
CLOSE;
SHOWTIME;
}
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
🍔 Отладочные макросы
Отладочные макросы в C++ используются для упрощения процесса отладки и диагностики программного кода
Основные отладочные макросы включают assert, static_assert и пользовательские макросы
🍓 assert
Макрос assert определён в заголовочном файле <cassert> и используется для проверки логических выражений во время выполнения программы. Если выражение вернёт false, assert завершает выполнение программы и выводит сообщение об ошибке
🍒 static_assert
static_assert введён в C++11 и позволяет проверять условия на этапе компиляции. Это особенно полезно для проверки условий, которые должны выполняться всегда, независимо от состояния программы во время выполнения
🫐 Пользовательские отладочные макросы
Вы также можете определять собственные макросы для отладки, которые помогут вам выводить дополнительную информацию или выполнять специфические проверки
Отладочные макросы в C++ используются для упрощения процесса отладки и диагностики программного кода
Основные отладочные макросы включают assert, static_assert и пользовательские макросы
🍓 assert
Макрос assert определён в заголовочном файле <cassert> и используется для проверки логических выражений во время выполнения программы. Если выражение вернёт false, assert завершает выполнение программы и выводит сообщение об ошибке
#include <cassert>
void test(int x) {
assert(x > 0 && "x must be positive");
// остальной код функции
}
int main() {
test(5); // проходит проверку
test(-3); // приводит к ошибке во время выполнения
return 0;
}
🍒 static_assert
static_assert введён в C++11 и позволяет проверять условия на этапе компиляции. Это особенно полезно для проверки условий, которые должны выполняться всегда, независимо от состояния программы во время выполнения
#include <type_traits>
template <typename T>
void check() {
static_assert(std::is_integral<T>::value, "T must be an integral type");
}
int main() {
check<int>(); // проходит проверку
check<float>(); // ошибка компиляции: T must be an integral type
return 0;
}
🫐 Пользовательские отладочные макросы
Вы также можете определять собственные макросы для отладки, которые помогут вам выводить дополнительную информацию или выполнять специфические проверки
#include <iostream>
#define DEBUG
#ifdef DEBUG
#define DEBUG_PRINT(x) std::cout << x << std::endl
#else
#define DEBUG_PRINT(x)
#endif
int main() {
int value = 42;
DEBUG_PRINT("Value: " << value);
return 0;
}
🍔 Как выстрелить себе в ногу в C и C++. Сборник рецептов Haiku OS
Статья о нюансах языка с которыми лучше быть поаккуратнее:
• Неинициализированные переменные
• Подозрительный #define
• Ошибки с функцией free
• Ошибки с оператором delete
• Функции без возвращаемого значения
• Работа с исключениями
• Сравнения с беззнаковыми переменными
• Опасные указатели
👉 Ссылочка
Статья о нюансах языка с которыми лучше быть поаккуратнее:
• Неинициализированные переменные
• Подозрительный #define
• Ошибки с функцией free
• Ошибки с оператором delete
• Функции без возвращаемого значения
• Работа с исключениями
• Сравнения с беззнаковыми переменными
• Опасные указатели
👉 Ссылочка