Что делает & ldquo; _ & rdquo; означает на языке программирования C? [Дубликат]

Краткий ответ: ваш метод foo() возвращается немедленно, а вызов $ajax() выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.

В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo() и сохранить результаты в члене этого объекта после завершения асинхронного вызова.

function foo(result) {
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;   // Store the async result
        }
    });
}

var result = { response: null };   // Object to hold the async result
foo(result);                       // Returns before the async completes

Обратите внимание, что вызов foo() ] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response.

3
задан Jonathan Leffler 2 August 2014 в 02:32
поделиться

3 ответа

Возможно, это помогает, начиная с C99, 7.1.3 («Зарезервированные идентификаторы»):

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

Мораль: для обычного кода пользователя, вероятно, лучше не начинать идентификаторы с подчеркиванием.

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

9
ответ дан Kerrek SB 26 August 2018 в 17:38
поделиться

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

Поскольку C не имеет функции пространства имен, это рудиментарный подход, чтобы избежать конфликтов имен с пользователем.

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

5
ответ дан Blagovest Buyukliev 26 August 2018 в 17:38
поделиться

независимо от того, является ли его C или нет, ведущее подчеркивание предоставляет программисту индикацию состояния, поэтому ему не нужно искать его. В PHP или любом объектно-ориентированном языке, где мы имеем дело с десятками тысяч свойств и методов, написанных тысячами авторов, видя, что префикс подчёркивания устраняет необходимость проскальзывать через класс и оценивать, является ли его объявленным приватным или защищенным или общедоступным. Это огромная экономия времени. практика началась до C, я уверен ...

0
ответ дан JamesAD-0 26 August 2018 в 17:38
поделиться
Другие вопросы по тегам:

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