использует ли C varargs ключевое слово end? - PullRequest
2 голосов
/ 21 апреля 2011

Извините, что беспокою кого-то, что может быть глупым вопросом:

У меня много кода, который использует аргументы переменных в стиле C. Код передает переменную с именем end в самом конце вызова функции переменной длины. И .... в коде также есть перечислитель с именем end . До сих пор они не конфликтовали (ошибка компилятора говорит, что у него есть неоднозначное определение: он не скажет мне, где определен таинственный второй «конец»), пока я не перешел на компилятор vc 10.0 (VS 2010).

Так что же, end - какое-то зарезервированное ключевое слово, особенно используемое в переменных args? Я очень мало знаю о них. Но я просмотрел тонны документации по переменным аргументам, а также поиска здесь, и ничего не нашел (что может быть хорошо). Поэтому я думаю, что ответ таков: end - это не специальное слово, используемое с varargs. Могу ли я попросить кого-нибудь это подтвердить?

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

Нет - C не определяет end как имеющий какое-либо специальное значение для varargs. Когда вы пишете функцию, которая принимает переменный список аргументов, вы сами решаете, как определить, как долго был передан список. Некоторые популярные: первый аргумент указывает (по крайней мере косвенно), сколько еще существует аргументов, и передает значение «страж» (например, NULL) после всех остальных. Для пары примеров printf делает первое, execl второе.

2 голосов
/ 21 апреля 2011

Давным-давно (например, 7-е издание Unix) были определены три внешних символа: etext, edata и end.Они соответствуют верхнему адресу кода, инициализированным данным и куче.Возможно, ваше определение end как-то противоречит этому.

...