size_t является типом, используемым для представления размеров (поскольку его имена подразумевают). Его платформа (и даже потенциально реализация) зависимый, и должна использоваться только с этой целью. Очевидно, представляя размер, size_t не подписан. Много функций stdlib, включая malloc, sizeof и различные функции строковой операции используют size_t в качестве типа данных.
интервал подписывается по умолчанию, и даже при том, что его размер является также иждивенцем платформы, это будут закрепленные 32 бита на самой современной машине (и хотя size_t составляет 64 бита на архитектуре на 64 бита, интервал остаются 32 бита длиной на той архитектуре).
Для суммирования: используйте size_t для представления размера объекта и интервала (или долго) в других случаях.
Немного погуглив, вы получите следующий результат из викибуков :
set argC=0
for %%x in (%*) do Set /A argC+=1
echo %argC%
Похоже, cmd.exe немного изменился по сравнению со старыми временами DOS :)
Другими словами, вещи могут показаться работать так, как их описал Ник, затем вы добавляете разделяемую библиотеку в строку ссылок a.out
, и они больше не работают таким образом.
На платформах ELF (таких как Linux) у вас есть большой контроль над видимостью и привязкой символов. См. Описание -fvisibility = hidden
и -rdynamic
на странице руководства GCC
, а также -Bsymbolic
на странице руководства компоновщика.
] У большинства других платформ UNIX есть способ управления привязкой символов, но он обязательно зависит от платформы.
у вас есть большой контроль над видимостью и привязкой символов. См. Описание -fvisibility = hidden
и -rdynamic
на странице руководства GCC
, а также -Bsymbolic
на странице руководства компоновщика.
] У большинства других платформ UNIX есть способ управления привязкой символов, но он обязательно зависит от платформы.
у вас есть большой контроль над видимостью и привязкой символов. См. Описание -fvisibility = hidden
и -rdynamic
на странице руководства GCC
, а также -Bsymbolic
на странице руководства компоновщика.
] У большинства других платформ UNIX есть способ управления привязкой символов, но он обязательно зависит от платформы.
Если ваша основная программа и динамическая библиотека статически связаны с helper.a, вам не нужно беспокоиться о смешивании версий helper.a (если вы не делаете такие вещи, как указатели передачи, выделенные в helper.a между границы .exe и .so).
Код, требуемый от helper.a, вставляется в фактический двоичный файл, когда вы связываете его. Поэтому, когда вы вызываете helper.a из .exe, вы будете выполнять код из сегмента кода вашего исполняемого образа, а когда вы вызываете helper.a из .so, вы будете выполнять код из части адресное пространство, в которое был загружен .so. Даже если вы вызываете ту же функцию внутри helper.a, вы