offsetof во время компиляции

Это было моей собственной попыткой, но я буду использовать ответ annakata, поскольку это кажется намного более чистым:

function AddUrlParameter(sourceUrl, parameterName, parameterValue, replaceDuplicates)
{
    if ((sourceUrl == null) || (sourceUrl.length == 0)) sourceUrl = document.location.href;
    var urlParts = sourceUrl.split("?");
    var newQueryString = "";
    if (urlParts.length > 1)
    {
        var parameters = urlParts[1].split("&");
        for (var i=0; (i < parameters.length); i++)
        {
            var parameterParts = parameters[i].split("=");
            if (!(replaceDuplicates && parameterParts[0] == parameterName))
            {
                if (newQueryString == "")
                    newQueryString = "?";
                else
                    newQueryString += "&";
                newQueryString += parameterParts[0] + "=" + parameterParts[1];
            }
        }
    }
    if (newQueryString == "")
        newQueryString = "?";
    else
        newQueryString += "&";
    newQueryString += parameterName + "=" + parameterValue;

    return urlParts[0] + newQueryString;
}

кроме того, я нашел этот плагин jQuery из другого сообщения на stackoverflow, и если Вам нужно больше гибкости, Вы могли бы использовать это: http://plugins.jquery.com/project/query-object

я думал бы, что код будет (не протестировали):

return $.query.parse(sourceUrl).set(parameterName, parameterValue).toString();

8
задан Brian Tompsett - 汤莱恩 12 February 2016 в 17:05
поделиться

3 ответа

Макрос offsetof () - это время компиляции построить. Не существует стандартного способа его определения, но у каждого компилятора должен быть какой-то способ сделать это.

Одним из примеров может быть:

#define offsetof( type, member ) ( (size_t) &( ( (type *) 0 )->member ) )

Не будучи конструкцией времени компиляции технически (см. комментарии пользователя "litb"), каждый компилятор должен иметь по крайней мере одно такое выражение, которое оно может разрешить во время компиляции, что и есть то, что offsetof () определено в .

Возможно, в вашем коде есть другая ошибка - отсутствие включения или что-то еще, что раздражает ваш компилятор.

9
ответ дан 5 December 2019 в 10:43
поделиться

Здесь он компилируется без предупреждения с g ++ 4, после того как я добавлю правильные #includes.

Вы #including stddef.h? offsetof () - это макрос, а не встроенное ключевое слово в C.

Если это не помогает, попробуйте сделать константу статической, чтобы ограничить ее модулем. Это могло бы порадовать компилятор.

4
ответ дан 5 December 2019 в 10:43
поделиться

Если у вас есть #include , как я предполагаю (сообщение об ошибке, без которого вы цитируете, не имеет смысла), это ошибка вашего компилятора. offsetof result - это целочисленное постоянное выражение в C99, а также в C90.

3
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

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