Перенос кода, который требует, чтобы символ по умолчанию был беззнаковым, в кодовую базу, которая не имеет этого требования.

Я рассмотрел многочисленные вопросы, касающиеся подписанного/неподписанного символа. Я понимаю, что в С++ есть три разных типа char. В настоящее время у меня есть большая кодовая база, которая скомпилирована с помощью Visual Studio - параметр «char unsigned по умолчанию» установлен на «Нет». Теперь я должен добавить конкретный проект в нашу кодовую базу (интегрировать его, чтобы он стал частью нашего текущего набора инструментов). Этот проект поставляется с документацией, в которой особо подчеркивается, что для него требуется, чтобы символ по умолчанию был беззнаковым.

Теперь я начал задаваться вопросом: почему автор использовал «char», а не «unsigned char», если ему нужно, чтобы char был беззнаковым? Что может пойти не так, если я изменю нашу кодовую базу, чтобы для параметра «беззнаковый символ по умолчанию» было установлено значение «Да»? И что может пойти не так, если я заменю все «char» на unsigned char во всем проекте, который я должен добавить в нашу кодовую базу?

На самом деле я, вероятно, должен был спросить: «Как мне добавить этот проект в нашу кодовую базу, ничего не сломав», но это было бы просьбой о решении, и я бы ничего не узнал;)


person PeterK    schedule 23.08.2010    source источник


Ответы (1)


Святое дерьмо. Можете ли вы сказать нам, откуда взялся этот код, чтобы мы могли его избежать? :)

Моим первым побуждением было создать код в виде отдельной библиотеки, на которую ссылается ваш существующий проект, и быть осторожным при взаимодействии с ним. Не зная точной природы рассматриваемого кода, я не знаю, возможно ли это.

Если код, который вы вводите, действительно предполагает, что char не имеет знака, вы должны просто изменить его, чтобы сделать его явным unsigned char, но это поднимает вопрос о том, придется ли вам объединять в новых версиях кода позже, поэтому я бы предпочел библиотечное решение.

person Nicholas Knight    schedule 23.08.2010
comment
Я склоняюсь ко второму варианту, так как проект будет обновляться, но как часть нашей текущей кодовой базы, поэтому любые сделанные изменения будут сохранены для будущих версий. Спасибо за Ваш ответ! - person PeterK; 23.08.2010