Я пытаюсь написать библиотечную функцию, где аргументы не должны быть нулевыми, и хотите, чтобы gcc генерировал предупреждение, если кто-то попытается передать NULL. Мой код:Как создать предупреждение о ненулевом аргументе для моей пользовательской функции?
#include <stdio.h>
#include <string.h>
int own_strcmp(const char *str1, const char *str2)
{
if(str1 == NULL || str2 == NULL){
if(str1 == NULL && str2 == NULL)
return 0;
else if(str1 == NULL)
return str2[0];
else
return str1[0];
}
int i=0;
while(str1[i] && str2[i]){
if(str1[i] != str2[i]){
break;
}
i++;
}
return str1[i]-str2[i];
}
int main(int argc, char *argv[]){
const char *str1 = "hello";
const char *str2 = "hello";
printf("%s and %s is %d\n", str1, str2, own_strcmp(NULL, str2));
printf("%s and %s is %d\n", str1, str2, strcmp(NULL, str2));
return 0;
}
для strcmp стандартной библиотеки используется для генерации предупреждений. но для моей функции это не так.
[email protected]:~$ gcc own_strcmp.c
own_strcmp.c: In function ‘main’:
own_strcmp.c:21:2: warning: null argument where non-null required (argument 1) [-Wnonnull]
printf("%s and %s is %d\n", str1, str2, strcmp(NULL, str2));
^
Почему бы просто не манипулировать входами «NULL» в функции? –
Надежность значений «null» означает, что компилятор решил проблему с остановкой. Самое маловероятное. Почему вы ожидаете, что gcc сможет? Если вы хотите создать такой код, C не является вашим языком. – Olaf
@DavidBowling Я могу это сделать, но я хочу, чтобы предупреждение отображалось пользователю, чтобы оно могло быть лучше для пользователя моей библиотеки. – rajesh6115