nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 21 Jan 2021 17:04



Reply to topic  [ 78 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6
Solid C - компилятор Си для Спринтера 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Sayman wrote:
лучше на BDS C посмотри.
загляни сюда. если не заглядывал ранее: http://www.z80.eu/c-compiler.html

Видел это ранее... но - спасибо, исходник скачал...

На SmallC я обратил внимание, поскольку его успешно переносили на разные платформы.
Выходит, подумал я, - код его многим достаточно понятен.
Так-то опыта у меня в этом практически нет.

_________________
iLavr


01 Nov 2020 11:39
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Склеил несколько разных тем по Solid C в одну - так проще ориентироваться :rotate:

Я обратил внимание, что сборки Solid C, включающей английские документы, которые мы тут всем посёлком переводили в своё время, так и не случилось - вот я думаю может собрать такую сборку и заодно поддержку DLL туда же воткнуть? Там правда новый CLIB.IRL к которому нет исходников - так вот может Василий покопается в архивах и выдаст нам обновлённые исходники CLIB где есть поддержка DLL? ;)

_________________
:eugeek: https://twitter.com/Shaos1973


13 Dec 2020 03:33
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Shaos wrote:
Vasil Ivanov wrote:
Shaos wrote:
В данном случае нам не нужен массив чаров - нам нужен первый элемент массива, т.к. 0x%02X. Далее, чтобы подучить первый элемент массива надо разыменовать указатель на него, т.е. *buffer. Ты говоришь, что компилятор это не просекает, т.е. надо писать (char)*buffer, но никак не (char*)*buffer, т.к. последнее означает преобразовать первый символ по указателю к указателю...


В папке Examples-ов в bin2c.c, откуда этот пример, обращение идет
именно как к чар-массиву.

Твои рассуждения правильны, но в отношении к данной версии Солида они не подходят. Только что проверил:
...


Да - это глюк. А если попробовать вот так:

printf("0x%02X\n", *(char*)buffer);

кол-во звездочек такое же, но они переставлены и код является верным с точки зрения любого компилятора Си


Только что проверил сам - похоже, что %X вообще неработает с типами char - ни с *buffer, ни с buffer[0], ни просто с переменной типа char - прибавляется еще старший байт, НО если предварительно сделать присвоение int i = *buffer и именно этот int скормить принтфу - то все будет ок.

Перепроверил через 16 лет - да, %X не работает нормально с типами char - ему надо 16-битный int т.е.

int i = *buffer;
printf("0x%02X\n", i);

отработает верно

P.S. вот так тоже работает:

printf("0x%02X\n", (int)*buffer);

т.е. суть в том, что в этом компиляторе если в формате стоит %X то аргументом должен быть int (а с char будет работать только %c показывая соответствующую букву)

_________________
:eugeek: https://twitter.com/Shaos1973


17 Dec 2020 00:46
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 78 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6

Who is online

Users browsing this forum: Google [Bot] and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.