Вопрос по c – NUL undeclared- первое использование в этой функции

2

Отпаутина Я понимаю, что C содержитNUL ключевое слово.

Но при компиляции я получаю ошибку

<code>NUL undeclared first use in this function'
</code>

Мой фрагмент кода:

<code>for (;;) {
        char ch = (*pzDest = *pzSrc);
        if (ch == NUL)
            break;
        if (ch == ':') {
            *pzDest = NUL;
            break;
        }
        pzDest++;
        pzSrc++;
    }
</code>

Есть идеи, почему я получаю эту ошибку?

Ваш Ответ

4   ответа
2

Это & APOS; sNULLнеNUL.

РЕДАКТИРОВАТЬ

Вы даже читали ссылку, которую вы разместили? Там очень конкретно сказано, что «NULL - это не NUL». NUL не является определенным ключевым словом в C ++ & quot;

NULL is a macro defined in for the null pointer.
NUL is the name of the first character in the ASCII character set. It corresponds to a zero value. There?s no
standard macro NUL in C, but some people like to define it.
The digit 0 corresponds to a value of 80, decimal. Don?t confuse the digit 0 with the value of ?? (NUL)!
NULL can be defined as ((void*)0), NUL as ??.

4

Нет, это не стандартно. Добавьте это в начале вашего кода или просто используйте0:

#define NUL 0

I infered you're not looking for NULL since you're doing ch == NUL

В различных текстах довольно часто упоминаются'\0' какNUL.

Если бы это было его намерением, код был бы намного более читабельным, просто сказав & quot; * pszDest = 0; & Quot; Позволяет избежать хлопот кого-либо другого за определение нестандартной константы, используемой в стандартной операции программирования на Си (то есть, завершение строки).
@Tiny, эта ссылка не говорит ничего подобного: «В Си нет стандартного макроса NUL, но некоторые люди любят его определять».
И это не будет ключевое слово, это будет макрос.
@Tinyspark На самом деле многие люди в этой теме сказалиNUL не является стандартным
Но следующая ссылка говорит, что C имеет ключевое слово «NUL». www.allinterview.com/showanswers/27930.html Tinyspark
2

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

Проблемы с понятиемNULL values между C и C ++ и внутри C ++ C ++ 98, C ++ 0x и C ++ 11 не новы, поэтому начиная с C ++ 0x и далееnullptr макрос был введен, чтобы избежать проблем и немного гармонизировать вещи.

Однако, если вы использовали код, который унаследован от проблемы устаревшей нагрузки NULL:

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

Самый простой способ - включить «stddef.h», обратите внимание, что содержимое stddef.h может сильно различаться в зависимости от вашей системы / Linux, это пример:

#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

#endif

Пример:

У меня возникла проблема при попытке использовать библиотеку i2c для управления шинами i2c на Raspberry-pi. В моем случае, включая i2c lib, было недостаточно, мне пришлось создать файл utils.h, который я включаю вместо заголовка i2c lib:

#ifndef UTILS_H
#define UTILS_H

/// if you have to use i2c-dev.h then use this utils header instead of make sure to include stddef.h before.
/// otherwise you will end up with the following error:
/// .../arm-unknown-linux-gnueabi/arm-unknown-linux-     gnueabi/sysroot/usr/include/linux/i2c-dev.h:175: error: 'NULL' undeclared (first         use in this function)
/// return i2c_smbus_access(file,value,0,I2C_SMBUS_QUICK,NULL);
///                                                       ^
#include <stddef.h>
#include <linux/i2c-dev.h>
#endif // UTILS_H
11

Там & APOS; sNULL а затем тамNUL.

NULL определен в stddef.h, используется очень широко и является ссылкой на нулевой указатель.

NUL отличается - это первый символ в стандартном наборе символов ASCII, и что более важно,it is not a standard macro, Возможно, вам придется определить это самостоятельно.

Чтобы определить NUL, выполните:

#define NUL '\0'

Похожие вопросы