Nano Hash - криптовалюты, майнинг, программирование

Преобразование ASCII в HEX при ошибке программирования c

Когда я пытаюсь скомпилировать код, я получаю следующую ошибку

main.c:12:15: ошибка: конфликтующие типы для ascii_to_hex unsigned char ascii_to_hex(unsigned char* buf)


#include <stdio.h>
#include <stdlib.h>
int main()
{
    
unsigned char str[] = {0x32, 0x35, 0x34, 0x035};
ascii_to_hex(str);

    return 0;
}

unsigned char ascii_to_hex(unsigned char* buf)
{
   unsigned char hundred, ten, unit, value;

   hundred = (*buf-0x30)*100;
   ten = (*(buf + 1)-0x30)*10;
   unit = *(buf+2)-0x30;     

   value = (hundred + ten + unit);
   printf("\nValue: %#04x \n", value);

   return value; 
}

Что плохого в том, что я здесь делаю?

14.07.2021

  • str это unsigned char[4], но ascii_to_hex нужен unsigned char*. Вместо этого передать &str[0] 14.07.2021
  • В этой ошибке должно быть что-то еще, сообщающее вам о неявном объявлении функции ascii_to_hex. Переместите функцию выше main или объявите прототип функции перед вызовом функции. 14.07.2021
  • @Raildex: это неправильно. В этой части кода нет ничего плохого, и она будет работать нормально, если функция объявлена ​​до использования. 14.07.2021
  • Всем спасибо, теперь все заработало без каких-либо изменений, я переместил определение функции над main(). 14.07.2021

Ответы:


1

Вы используете ascii_to_hex перед его объявлением, поэтому компилятор делает вывод, что он имеет сигнатуру по умолчанию для функции. Я забыл, что это такое, [РЕДАКТИРОВАТЬ: очевидно,

int ascii_to_hex()

-- Я посмотрел ], но что бы это ни было, это не

unsigned char ascii_to_hex(unsigned char* buf)

Компилятор говорит вам, что то, что он вывел из сигнатуры функции, не соответствовало сигнатуре, с которой он столкнулся позже. Это намного яснее в выводе gcc:

cc     program.c   -o program
program.c: In function ‘main’:
program.c:11:1: warning: implicit declaration of function ‘ascii_to_hex’ [-Wimplicit-function-declaration]
   11 | ascii_to_hex(str);
      | ^~~~~~~~~~~~
program.c: At top level:
program.c:16:15: error: conflicting types for ‘ascii_to_hex’
   16 | unsigned char ascii_to_hex(unsigned char* buf)
      |               ^~~~~~~~~~~~
program.c:11:1: note: previous implicit declaration of ‘ascii_to_hex’ was here
   11 | ascii_to_hex(str);
      | ^~~~~~~~~~~~
make: *** [<builtin>: program] Error 1

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

Чтобы исправить это, вам нужно либо переместить определение функции над определением main, либо дать прототип функции, чтобы компилятор знал ее сигнатуру во время ее вызова.

14.07.2021
  • да, вы правы!! Я переместил определение функции над main() без каких-либо изменений, и все заработало нормально. 14.07.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..