Я читал подобные вопросы, но я не смог найти тот, который помогает мне понять это предупреждение в этом случае. Я нахожусь на своей первой неделе, пытаясь научиться C, поэтому заранее извиняюсь.Указатели-мишени в прохождении аргумента различаются по подписке
я получаю следующее предупреждение и примечание:
In function 'read_line':
warning: pointer targets in passing argument 1 of 'read_byte' differ in signedness [-Wpointer-sign]
res = read_byte(&data);
^
note: expected 'char *' but argument is of type 'uint8_t *'
char read_byte(char * data)
При попытке скомпилировать этот код:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
char read_byte(char * data)
{
if(fs > 0)
{
int n = read(fs, data, 1);
if (n < 0)
{
fprintf(stderr, "Read error\n");
return 1;
}
}
return *data;
}
uint8_t read_line(char * linebuf)
{
uint8_t data, res;
char * ptr = linebuf;
do
{
res = read_byte(&data);
if(res < 0)
{
fprintf(stderr, "res < 0\n");
break;
}
switch (data)
{
case '\r' :
break;
case '\n' :
break;
default :
*(ptr++) = data;
break;
}
}while(data != '\n');
*ptr = 0; // terminaison
return res;
}
int main(int argc, char **argv)
{
char buf[128];
if(read_line(buf) == 10)
{
// parse data
}
close(fs);
return 0;
}
я удалил бесполезную часть, включая тот, который открывает порт и инициализирует фс.
если 'res' короток для' result', то почему бы не использовать 'int's и возвращать TRUE, или ЛОЖНЫЙ? Кажется мне намного яснее. В настоящее время у вас непоследовательное использование 'res' и' data'. –
Действительно, (res <0) бесполезно. Но в каких случаях возвращать TRUE или FALSE? – ogs