Принятый ответ относится к статье в Википедии при обсуждении действительной локальной части адреса электронной почты, но Википедия не является авторитетом в этом.
IETF RFC 3696 является авторитетом по этому вопросу, и с ним следует ознакомиться в разделе 3. Ограничения для адресов электронной почты на странице 5:
Современные адреса электронной почты состоят из «локальной части», отделенной от «доменной части» (полного доменного имени) знаком at-sign ( "@"). Синтаксис доменной части соответствует синтаксису в предыдущем разделе. Проблемы, выявленные в этом разделе в отношении фильтрации и списков имен, относятся также к доменным именам, используемым в контексте электронной почты. Имя домена также может быть заменено IP-адресом в квадратных скобках, но эта форма настоятельно не рекомендуется, за исключением случаев тестирования и устранения неполадок.
Локальная часть может появляться с использованием соглашений о цитировании, описанных ниже. Указанные формы редко используются на практике, но необходимы для некоторых законных целей. Следовательно, они не должны быть отклонены в процедурах фильтрации, но вместо этого должны быть переданы в систему электронной почты для оценки хостом назначения.
Точное правило заключается в том, что любой символ ASCII, включая управляющие символы, может отображаться в кавычках или в строке в кавычках. Когда необходимо заключить в кавычки, символ обратной косой черты используется для цитирования следующего символа. Например,
Abc\@def@example.com
является действительной формой адреса электронной почты. Также могут появляться пробелы, как в
Fred\ Bloggs@example.com
Символ обратной косой черты может также использоваться для цитирования, например,
Joe.\\Blow@example.com
В дополнение к цитированию с использованием символа обратной косой черты, обычный двойной Символы-кавычки могут использоваться для окружения строк. Например,
"Abc@def"@example.com "Fred Bloggs"@example.com
являются альтернативными формами первых двух примеров выше. Эти цитируемые формы редко рекомендуются и на практике встречаются редко, но, как обсуждалось выше, должны поддерживаться приложениями, обрабатывающими адреса электронной почты. В частности, цитируемые формы часто появляются в контексте адресов, связанных с переходами из других систем и контекстов; эти переходные требования все еще возникают, и, поскольку система, которая принимает предоставленный пользователем адрес электронной почты, не может «знать», связан ли этот адрес с устаревшей системой, формы адреса должны быть приняты и переданы в среду электронной почты.
Без кавычек локальные части могут состоять из любой комбинации
алфавитных символов, цифр или любого из специальных символов! # $ % & ' * + - / = ? ^ _ ` . { | } ~
точка (".") Также может появляться , но не может использоваться для начала или окончания локальной части, а также не могут появляться два или более последовательных периода. Иными словами, любой символ ASCII (печатный), отличный от знака-символа ("@"), обратной косой черты, двойной кавычки, запятой или квадратных скобок, может отображаться без кавычек. Если появляется какой-либо из этого списка исключенных символов, они должны быть заключены в кавычки. Такие формы, как
user+mailbox@example.com customer/department=shipping@example.com $A12345@example.com !def!xyz%abc@example.com _somename@example.com
действительны и видны довольно регулярно, но разрешены любые из перечисленных выше символов.
Как и другие, я отправляю регулярное выражение для PHP и JavaScript для проверки адресов электронной почты:
/^[a-z0-9!'#$%&*+\/=?^_`{|}~-]+(?:\.[a-z0-9!'#$%&*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-zA-Z]{2,}$/i
У вас есть несколько вариантов, и все они отстой.
#undef DrawText
в свой собственный код окна .h
. Если другая библиотека включает его за вас, не включайте его напрямую. Вместо этого включите его в отдельный файл .cpp, который затем может отображать ваши собственные функции-оболочки в своем заголовке. DrawText
. По возможности я обычно выбираю средний вариант . windows.h
ведет себя плохо по множеству других причин (например, он фактически не компилируется, если вы не активируете проприетарные расширения C ++ от Microsoft), поэтому я просто избегаю его как чумы. Он не попадает в мои файлы, если я могу ему помочь. Вместо этого я пишу отдельный файл .cpp, чтобы содержать его и предоставлять необходимые мне функции.
Кроме того, не стесняйтесь присылать это как ошибку и / или отзыв на connect.microsoft.com. Windows.h - это преступно плохо спроектированный заголовок, и если люди обратят на него внимание Microsoft, есть (небольшая) вероятность, что однажды они его исправят.
Хорошая новость в том, что windows.h
это только заголовок , который ведет себя так плохо. Другие заголовки обычно пытаются добавить к макросу префикс некоторого имени, зависящего от библиотеки, чтобы избежать конфликтов имен, они стараются избегать создания макросов для общих имен и стараются избегать использования большего количества макросов, чем необходимо.
Это нежелательный побочный эффект #include
ing
. Предполагая, что вы на самом деле не используете Windows ' DrawText ()
где-либо в своей программе, совершенно безопасно #undef
сразу после:
// wherever you #include <windows.h>, or any other windows header
#include <windows.h>
#undef DrawText
Не существует общего способа избежать этой проблемы - как только вы # включаете файл заголовка с помощью препроцессора, он может переопределить любое имя, которое ему нравится, и вы ничего не можете с этим поделать. Вы можете #undef имя, но это предполагает, что вы знаете, что имя было # определено изначально.
Просто #undef
символы, которые вам не нужны. Но убедитесь, что вы включили windows.h
, и сделайте это перед включением SDL:
#include <windows.h>
#undef DrawText
#include <SDL/SDL_opengl.h>