Skip to content

Instantly share code, notes, and snippets.

View zamabuvaraeu's full-sized avatar

Эрик Замабувараев‐Ёмолкуу zamabuvaraeu

View GitHub Profile

J.2 Неопределенное поведение 1 Поведение не определено при следующих обстоятельствах:

Требование "должен" или "не должен", которое выходит за рамки ограничения, нарушено (пункт 4).

Непустой исходный файл не заканчивается символом новой строки, которому непосредственно не предшествует символ обратной косой черты, или заканчивается символом частичной предварительной обработки или комментарием (5.1.1.2).

Конкатенация токенов создает последовательность символов, соответствующую синтаксису универсального символьного имени (5.1.1.2).

Программа в размещенной среде не определяет функцию с именем main , используя одну из указанных форм (5.1.2.2.1).

Постоянно наталкиваюсь на путаницу между нулевым указателем и нулевым адресом. А ведь это разные вещи. И нулевой указатель может не указывать на нулевой адрес.

Нулевой указатель — собый указатель, гарантированно не ссылающийся на объект или функцию.

Нулевой адрес — просто адрес со значением ноль.

Присваивание нуля (и сравнение с нулём) — на самом деле это не присваивание, это специальная инструкция компилятору, которая заставляет считать указатели нулевыми указателями.

Dim p As Integer Ptr = 0
#include once "windows.bi"
#include once "crt.bi"
Dim user_name As String, user_age As Integer
Input "Enter your name and age, separated by a comma: ", user_name, user_age
Print "Your name is " & user_name & ", and you are " & user_age & " years old."
Print "Great!"
@zamabuvaraeu
zamabuvaraeu / QSortTest.bas
Created May 12, 2024 06:56
Сортировка массива библиотечной функцией qsort
#include once "crt.bi"
' Функция‐компаратор
' Такая функция принимает два аргумента и возвращает значение
' какой из этих аргументов больше, меньше или они равны
' Функция должна быть отмечена как "cdecl"
Function Comparator cdecl(ByVal p As Const Any Ptr, ByVal q As Const Any Ptr) As Long
Dim px As Integer Ptr = CPtr(Integer Ptr, p)
Dim py As Integer Ptr = CPtr(Integer Ptr, q)
@zamabuvaraeu
zamabuvaraeu / MemoryAllocatorTest.bas
Created April 27, 2024 10:08
Измерение производительности менеджеров памяти
#include once "crt.bi"
#include once "windows.bi"
#include once "win\ole2.bi"
Const PAGE_SIZE = 4096
Const ElapsedCount = 10
Const RepeatsCount = 5000000
Type ElapsedsVector
@zamabuvaraeu
zamabuvaraeu / ReplaceString.bas
Last active April 23, 2024 22:59
Test replace string
' Compile with fbc 1.10.1
' fbc64.exe -R -O 3 -v -w all -w error -gen gcc -m file file.bas
#include once "crt.bi"
Redim Shared pszDimPosReplaces(1000) As Zstring Ptr
Function misc_replace_string_proc(sString As Zstring , sSearchStr As Zstring, sReplaceStr As Zstring, iPosition As Integer = 1 , iSearchParam As Integer = 0 ) As String Export
Dim As Integer iIndexDim , iNextPos = iPosition-1
@zamabuvaraeu
zamabuvaraeu / SleepMsg.bas
Created April 13, 2024 17:13
Sleep без блокировки GUI
#include once "windows.bi"
Const MSGF_SLEEPMSG = &h5300
Private Function SleepMsg(ByVal dwTimeout As DWORD) As Boolean
Dim dwStart As DWORD = GetTickCount()
Dim dwFinish As DWORD = dwStart
Dim dwElapsed As DWORD = dwFinish - dwStart
@zamabuvaraeu
zamabuvaraeu / GetStatusBarText.bas
Created April 5, 2024 09:02
Получение текста строки состояния
#define unicode
#include once "windows.bi"
#include once "win\commctrl.bi"
Dim hwndStatus As HWND = Cast(HWND, &H002B0BAC)
Dim ProcessId As DWORD = Any
Dim ThreadId As DWORD = GetWindowThreadProcessId(hwndStatus, @ProcessId)
Dim ProcessHandle As HANDLE = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessId)
@zamabuvaraeu
zamabuvaraeu / Product.md
Last active February 12, 2024 15:15
Оптимизирующий компилятор удалил вызов функции

Оптимизации

Как компилятор удаляет вызовы функций.

Исходный код

Посмотрим код на бейсике, который вычисляет факториал числа:

' Для использования форматированного вывода
@zamabuvaraeu
zamabuvaraeu / DeleteSingleFile.cmd
Created January 7, 2024 16:29
Удаление файла без пары
for %%I in ("*.dng") do (
call :RemoveSingleFile %%I
)
exit /b 0
:RemoveSingleFile
set FileNameOriginal=%1
set FileNameWithoutDng=%FileNameOriginal:~0,-4%