使用_使用说明 - CSDN
  • 2014年java技术与框架使用情况统计报告

    千次下载 热门讨论 2020-07-30 23:32:27
    2014年java相关技术与框架使用情况统计报告。英文。由RebelLabs统计。 JAVA TOOLS AND TECHNOLOGIES LANDSCAPE FOR 2014 A GLOBAL SURVEY OF 2164 JAVA PROFESSIONALS 包括不同java框架、服务器、构建工具,静态代码...
  • 使用 “&” 来创建指向成员的指针 projectName filePath col CL 很新手人看到这个错误很蒙蔽,到底错哪了呢? 别急,别急!先看一下怎么修改吧,估计看了你会默然一笑 修改 在提示的那一行认真检查类成员函数...

    VS错误提示

    严重性 代码 说明 项目 文件 行 禁止显示状态 工具
    错误 C3867 “xxxx”: 非标准语法;请使用 “&” 来创建指向成员的指针 projectName filePath col CL

    很新手人看到这个错误很蒙蔽,到底错哪了呢?
    别急,别急!先看一下怎么修改吧,估计看了你会默然一笑

    修改

    在提示的那一行认真检查类成员函数的调用,如

    Widget.name
    //Widget.name(); 正确的调用方式
    

    原因

    你使用应该是类的成员函数,而不是类的成员变量
    当我们使用类的成员函数时,VS编辑器并不会自动帮我们加上圆括号(它会提示是成员函数,还是成员变量哦[图标颜色不同]),所以很多新手会忘记加()以表示函数的调用。
    当不加括号是,也就是函数不传入参数(void也是参数哦)的话,编译器将会理解成函数指针(在c++中,函数名就是函数的起始地址),但函数指针需要这样写

    &Widget.name
    

    所以就出现这样的错误提示

    总结

    VS对C++的支持比其他编辑器好,造成很多提示错误可能跟其他编辑器不一样,但是弄懂后反而帮助我们更好的理解C++的特性。
    由于VS编辑器不像QT那样函数调用会直接帮你加上(),在调用函数时会忘记加()导致了这种错误。你可能说它不可以学QT吗?上面已经说了,它还支持函数指针的处理,所以才没有采用这个机制。才其它阵营转来的新手不是很习惯,不过,用多了就好了。

    展开全文
  • C/C++中#pragma once的使用

    万次阅读 多人点赞 2017-12-02 16:54:42
    C/C++中#pragma once的使用

    在C/C++中,为了避免同一个文件被include多次,有两种方式:一种是#ifndef方式,一种是#pragma once方式(在头文件的最开始加入)。

    #ifndef SOME_UNIQUE_NAME_HERE
    #define SOME_UNIQUE_NAME_HERE
    
    // contents of the header
    ...
    
    #endif // SOME_UNIQUE_NAME_HERE
    #pragma once
    
    // contents of the header
    ...
    #ifndef的是方式是受C/C++语言标准支持。#ifndef方式依赖于宏名不能冲突。它不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。缺点是如果不同头文件中的宏名不小心”碰撞”,可能就会导致你看到头文件明明存在,编译器却硬说找不到声明的状况。由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式。

            #pragma once一般由编译器提供保证:同一个文件不会被包含多次。这里所说的”同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。无法对一个头文件中的一段代码作#pragma once声明,而只能针对文件。此方式不会出现宏名碰撞引发的奇怪问题,大型项目的编译速度也因此提供了一些。缺点是如果某个头文件有多份拷贝,此方法不能保证它们不被重复包含。在C/C++中,#pragma once是一个非标准但是被广泛支持的方式。

            #pragma once方式产生于#ifndef之后。#ifndef方式受C/C++语言标准的支持,不受编译器的任何限制;而#pragma once方式有些编译器不支持(较老编译器不支持,如GCC 3.4版本之前不支持#pragmaonce),兼容性不够好。#ifndef可以针对一个文件中的部分代码,而#pragma once只能针对整个文件。

            #pragma once is very well supported across compilers but not actually part of the standard. The preprocessor may be a little faster with it as it is more simple to understand your exact intent. To speed up compile time more just forward declare instead of including in .h files when you can.

    The use of #pragma once can reduce build times as the compiler will not open and read the file after the first #include of the file in the translation unit. This is referred to as multiple-include optimization. It has an effect similar to the #include guard idiom, which uses preprocessor macro definitions to prevent multiple inclusion of the contents of the file. This also helps to prevent violations of the one definition rule----the requirement that all templates,types, functions, and objects have no more than one definition in your code.

            #pragma once is a non-standard, but widely supported, feature of C++ compilers. The concept is simple: any file containing #pragma once will only actually be included once, even if the programmer includes it multiple times.

    GitHub: https://github.com/fengbingchun/Messy_Test

    展开全文
  • gcc编译错误表

    千次阅读 2015-01-14 12:34:24
    conversion from %s to %s not supported by iconv” iconv 不支持从 %s 到 %s 的转换” iconv_open” iconv_open” ...no iconv implementation, cannot convert from %s to %s” ...没有 iconv 的实现,无法从 %s ...

    conversion from %s to %s not supported by iconv”
    iconv 不支持从 %s 到 %s 的转换”

    iconv_open”
    iconv_open”

    no iconv implementation, cannot convert from %s to %s”
    没有 iconv 的实现,无法从 %s 转换到 %s”

    character 0x%lx is not in the basic source character set\n”
    字符 0x%lx 不在基本源字符集中\n”

    converting to execution character set”
    转换到可执行文件的字符集”

    character 0x%lx is not unibyte in execution character set”
    字符 0x%lx 在执行字符集中不是单字节的”

    Character %x might not be NFKC”
    字符 %x 可能不是 NFKC”

    universal character names are only valid in C++ and C99″
    Unicode 字符名只在 C++ 和 C99 中有效”

    the meaning of ‘\\%c’ is different in traditional C”
    ‘\\%c’的意义与在传统 C 中不同”

    In _cpp_valid_ucn but not a UCN”
    在 _cpp_valid_ucn 中但不是一个 UCN”

    incomplete universal character name %.*s”
    不完全的 Unicode 字符名 %.*s”

    %.*s is not a valid universal character”
    %.*s 不是一个有效的 Unicode 字符”

    ‘$’ in identifier or number”
    ‘$’出现在标识符或数字中”

    universal character %.*s is not valid in an identifier”
    Unicode 字符 %.*s 在标识符中无效”

    universal character %.*s is not valid at the start of an identifier”
    Unicode 字符 %.*s 在标识符开头无效”

    converting UCN to source character set”
    将 UCN 转换到源字符集”

    converting UCN to execution character set”
    将 UCN 转换到执行字符集”

    the meaning of ‘\\x’ is different in traditional C”
    ‘\\x’的意义与在传统 C 中不同”

    \\x used with no following hex digits”
    \\x 后没有 16 进制数字”

    hex escape sequence out of range”
    16 进制转义序列越界”

    octal escape sequence out of range”
    8 进制转义序列越界”

    the meaning of ‘\\a’ is different in traditional C”
    ‘\\a’的意义与在传统 C 中不同”

    non-ISO-standard escape sequence, ‘\\%c’”
    非 ISO 标准的转义序列,‘\\%c’”

    unknown escape sequence: ‘\\%c’”
    未知的转义序列:‘\\%c’”

    unknown escape sequence: ‘\\%s’”
    未知的转义序列:‘\\%s’”

    converting escape sequence to execution character set”
    将转义序列转换到执行字符集”

    character constant too long for its type”
    字符常量大小超出其类型”

    multi-character character constant”
    多字节字符常量”

    empty character constant”
    空的字符常量”

    failure to convert %s to %s”
    无法从 %s 转换到 %s”

    extra tokens at end of #%s directive”
    #%s 指示的末尾有多余的标识符”

    #%s is a GCC extension”
    #%s 是一个 GCC 扩展”

    #%s is a deprecated GCC extension”
    #%s 是一个已过时的 GCC 扩展”

    suggest not using #elif in traditional C”
    建议在传统 C 中不使用 #elif”

    traditional C ignores #%s with the # indented”
    当 # 有缩进时传统 C 忽略 #%s”

    suggest hiding #%s from traditional C with an indented #”
    建议使用缩进的 # 以让 #%s 对传统 C 不可见”

    embedding a directive within macro arguments is not portable”
    将一个指示嵌入宏参数中是不可移植的”

    style of line directive is a GCC extension”
    line 指示的风格是一个 GCC 扩展”

    invalid preprocessing directive #%s”
    无效的预处理指示 #%s”

    \”defined\” cannot be used as a macro name”
    “defined”不能被用作宏名”

    \”%s\” cannot be used as a macro name as it is an operator in C++”
    “%s”不能被用作宏名,因为它是 C++ 中的一个操作符”

    no macro name given in #%s directive”
    #%s 指示中未给出宏名”

    macro names must be identifiers”
    宏名必须是标识符”

    undefining \”%s\”"
    取消对“%s”的定义”

    missing terminating > character”
    缺少结尾的 > 字符”

    #%s expects \”FILENAME\” or ”
    #%s 需要 \”FILENAME\” 或 ”

    empty filename in #%s”
    #%s 中文件名为空”

    #include nested too deeply”
    #include 嵌套过深”

    #include_next in primary source file”
    #include_next 出现在主源文件中”

    invalid flag \”%s\” in line directive”
    line 指示中有无效的标记“%s””

    unexpected end of file after #line”
    #line 后未预期的文件结束”

    \”%s\” after #line is not a positive integer”
    #line 后的“%s”不是一个正整数”

    line number out of range”
    行号超出范围”

    \”%s\” is not a valid filename”
    “%s”不是一个有效的文件名”

    \”%s\” after # is not a positive integer”
    # 后的“%s”不是一个正整数”

    invalid #%s directive”
    无效的 #%s 指示”

    registering pragmas in namespace \”%s\” with mismatched name expansion”
    在命名空间“%s”中注册 pragma 时名称扩展不匹配”

    registering pragma \”%s\” with name expansion and no namespace”
    pragma “%s”被注册为一个命名扩展,而没有命名空间”

    registering \”%s\” as both a pragma and a pragma namespace”
    “%s”既被注册为一个pragma 又被注册为一个 pragma 命名空间”

    #pragma %s %s is already registered”
    #pragma %s %s 已经被注册”

    #pragma %s is already registered”
    #pragma %s 已经被注册”

    registering pragma with NULL handler”
    pragma 注册为被 NULL 处理”

    #pragma once in main file”
    #pragma once 出现在主文件中”

    invalid #pragma push_macro directive”
    无效的 #pragma push_macro 指示”

    invalid #pragma pop_macro directive”
    无效的 #pragma pop_macro 指示”

    invalid #pragma GCC poison directive”
    无效的 #pragma GCC poison 指示”

    poisoning existing macro \”%s\”"
    对已存在的宏“%s”投毒”

    #pragma system_header ignored outside include file”
    #pragma system_heade 在包含文件外被忽略”

    cannot find source file %s”
    找不到源文件 %s”

    current file is older than %s”
    当前文件早于 %s”

    _Pragma takes a parenthesized string literal”
    _Pragma 需要一个括起的字符串字面常量”

    #else without #if”
    #else 没有匹配的 #if”

    #else after #else”
    #else 出现在 #else 后”

    the conditional began here”
    条件自此开始”

    #elif without #if”
    #elif 没有匹配的 #if”
    #elif after #else”
    #elif 出现在 #else 后”

    #: directives.c:1960
    #endif without #if”
    #endif 没有匹配的 #if”

    missing ‘(‘ after predicate”
    谓词后缺少‘(’”

    missing ‘)’ to complete answer”
    完整的答案缺少‘)’”

    predicate’s answer is empty”
    谓词的答案为空”

    assertion without predicate”
    断言后没有谓词”

    predicate must be an identifier”
    谓词必须是一个标识符”

    \”%s\” re-asserted”
    重断言“%s””

    unterminated #%s”
    未终止的 #%s”

    unterminated comment”
    未结束的注释”

    stdout”
    stdout”

    %s: %s”
    %s:%s”

    too many decimal points in number”
    数字中有太多小数点”

    fixed-point constants are a GCC extension”
    定点常量是一个 GCC 扩展”

    invalid digit \”%c\” in binary constant”
    二进制常量中有无效数字“%c””

    invalid digit \”%c\” in octal constant”
    8 进制常量中有非法字符“%c””

    invalid prefix \”0b\” for floating constant”
    浮点常量的“0b”前缀无效”

    use of C99 hexadecimal floating constant”
    使用 C99 式的 16 进制浮点常量”

    exponent has no digits”
    指数部分没有数字”

    hexadecimal floating constants require an exponent”
    16 进制浮点常量需要指数部分”

    invalid suffix \”%.*s\” on floating constant”
    浮点常量的“%.*s”后缀无效”

    traditional C rejects the \”%.*s\” suffix”
    传统 C 不接受“%.*s”后缀”

    suffix for double constant is a GCC extension”
    双精度常量后缀是一个 GCC 扩展”

    invalid suffix \”%.*s\” with hexadecimal floating constant”
    十六进制浮点常量的“%.*s”后缀无效”

    decimal float constants are a GCC extension”
    十进制浮点常量是一个 GCC 扩展”

    invalid suffix \”%.*s\” on integer constant”
    整数常量的“%.*s”后缀无效”

    use of C++0x long long integer constant”
    使用 C++0x long long 整数常量”

    imaginary constants are a GCC extension”
    虚数常量是一个 GCC 扩展”

    binary constants are a GCC extension”
    二进制常量是一个 GCC 扩展”

    integer constant is too large for its type”
    整数常量值超出其类型”

    integer constant is so large that it is unsigned”
    整数常量太大,认定为 unsigned”

    missing ‘)’ after \”defined\”"
    “defined” 后出现‘)’”

    operator \”defined\” requires an identifier”
    操作符“defined”需要一个标识符”

    (\”%s\” is an alternative token for \”%s\” in C++)”
    (在 C++ 中“%s”会是“%s”的替代标识符)”

    this use of \”defined\” may not be portable”
    使用“defined”可能不利于移植”

    floating constant in preprocessor expression”
    浮点常量出现在预处理表达式中”

    imaginary number in preprocessor expression”
    预处理表达式中出现虚数”

    \”%s\” is not defined”
    “%s”未定义”

    assertions are a GCC extension”
    断言是一个 GCC 扩展”

    assertions are a deprecated extension”
    断言是一个已过时的 GCC 扩展”

    missing binary operator before token \”%s\”"
    标识符“%s”前缺少二元运算符”

    token \”%s\” is not valid in preprocessor expressions”
    标识符“%s”在预处理表达式中无效”

    missing expression between ‘(‘ and ‘)’”
    ‘(’与‘)’之间缺少表达式”

    %s with no expression”
    %s 后没有表达式”

    operator ‘%s’ has no right operand”
    操作符‘%s’没有右操作数”

    operator ‘%s’ has no left operand”
    操作符‘%s’没有左操作数”

    ‘:’ without preceding ‘?’”
    ‘:’前没有‘?’”

    unbalanced stack in %s”
    %s 中堆栈不平衡”

    impossible operator ‘%u’”
    不可能的操作‘%u’”

    missing ‘)’ in expression”
    表达式中缺少‘)’”

    ‘?’ without following ‘:’”
    ‘?’后没有‘:’”

    integer overflow in preprocessor expression”
    预处理表达式中整数溢出”

    missing ‘(‘ in expression”
    表达式中缺少‘(’”

    the left operand of \”%s\” changes sign when promoted”
    “%s”的左操作数在提升时变换了符号”

    the right operand of \”%s\” changes sign when promoted”
    “%s”的右操作数在提升时变换了符号”

    traditional C rejects the unary plus operator”
    传统 C 不接受单目 + 运算符”

    comma operator in operand of #if”
    #if 操作数中出现逗号”

    division by zero in #if”
    #if 中用零做除数”

    NULL directory in find_file”
    find_file 中有 NULL 目录”

    one or more PCH files were found, but they were invalid”
    找到一个或多个 PCH 文件,但它们是无效的”

    use -Winvalid-pch for more information”
    使用 -Winvalid-pch 以获得更多信息”

    %s is a block device”
    %s 是一个块设备”

    %s is too large”
    %s 过大”

    %s is shorter than expected”
    %s 短于预期”

    no include path in which to search for %s”
    没有包含路径可供搜索 %s”

    Multiple include guards may be useful for:\n”
    多个防止重包含可能对其有用:\n”

    cppchar_t must be an unsigned type”
    cppchar_t 必须是无符号型”

    preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits”
    预处理算术的最高精度为 %lu 位;目标需要 %lu 位”

    CPP arithmetic must be at least as precise as a target int”
    CPP 算术必须至少具有目标 int 的精度”

    target char is less than 8 bits wide”
    目标 char 短于 8 位”

    target wchar_t is narrower than target char”
    目录 wchar_t 短于目标 char”

    target int is narrower than target char”
    目标 int 短于目标 char”

    CPP half-integer narrower than CPP character”
    CPP 半整数短于 CPP 字符”

    CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits”
    在此宿主机上,CPP 不能处理长于 %lu 位的宽字符常量,但目标需要 %lu 位”

    backslash and newline separated by space”
    反斜杠和换行为空格所分隔”

    backslash-newline at end of file”
    反斜杠续行出现在文件末尾”

    trigraph ??%c converted to %c”
    三元符 ??%c 转换为 %c”

    trigraph ??%c ignored, use -trigraphs to enable”
    三元符 ??%c 被忽略,请使用 -trigraphs 来启用”

    \”/*\” within comment”
    “/*”出现在注释中”

    %s in preprocessing directive”
    预处理指示中出现 %s”

    null character(s) ignored”
    忽略空字符”

    `%.*s’ is not in NFKC”
    ‘%.*s’不在 NFKC 中”

    `%.*s’ is not in NFC”
    ‘%.*s’不在 NFC 中”

    attempt to use poisoned \”%s\”"
    试图使用有毒的“%s””

    __VA_ARGS__ can only appear in the expansion of a C99 variadic macro”
    __VA_ARGS__ 只能出现在 C99 可变参数宏的展开中”

    identifier \”%s\” is a special operator name in C++”
    标识符“%s”是 C++ 中的一个特殊操作符”

    raw string delimiter longer than 16 characters”
    原始字符串分隔符长过 16 个字符”

    invalid character ‘%c’ in raw string delimiter”
    原始字符串分隔符中有无效字符‘%c’”

    unterminated raw string”
    未终止的原始字符串”

    null character(s) preserved in literal”
    空字符将保留在字面字符串中”

    missing terminating %c character”
    缺少结尾的 %c 字符”

    C++ style comments are not allowed in ISO C90″
    C++ 风格的注释在 ISO C90 中不被允许”

    (this will be reported only once per input file)”
    (此警告为每个输入文件只报告一次)”

    multi-line comment”
    多行注释”

    unspellable token %s”
    无法拼出的标识符 %s”

    macro \”%s\” is not used”
    宏“%s”未被使用”

    invalid built-in macro \”%s\”"
    无效的内建宏“%s””

    could not determine file timestamp”
    无法决定文件的时间戳”

    could not determine date and time”
    无法决定日期与时间”

    __COUNTER__ expanded inside directive with -fdirectives-only”
    带 -fdirectives-only 时 __COUNTER__ 在指示中扩展”

    invalid string literal, ignoring final ‘\\’”
    无效的字面字符串,忽略最后的‘\\’”

    pasting \”%s\” and \”%s\” does not give a valid preprocessing token”
    毗连“%s”和“%s”不能给出一个有效的预处理标识符”

    ISO C99 requires rest arguments to be used”
    ISO C99 需要使用剩余的参数”

    macro \”%s\” requires %u arguments, but only %u given”
    宏“%s”需要 %u 个参数,但只给出了 %u 个”

    macro \”%s\” passed %u arguments, but takes just %u”
    宏“%s”传递了 %u 个参数,但只需要 %u 个”

    unterminated argument list invoking macro \”%s\”"
    调用宏“%s”时参数列表未终止”

    function-like macro \”%s\” must be used with arguments in traditional C”
    类似函数的宏“%s”在传统 C 中必须与参数一起使用”

    invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98″
    调用宏 %s 的参数 %d:空的宏参数未被 ISO C90 和 ISO C++98 定义”

    duplicate macro parameter \”%s\”"
    重复的宏参数“%s””

    \”%s\” may not appear in macro parameter list”
    “%s”不能出现在宏参数列表中”

    macro parameters must be comma-separated”
    宏参数必须由逗号隔开”

    parameter name missing”
    缺少形参名”

    anonymous variadic macros were introduced in C99″
    匿名可变参数宏在 C99 中被引入”

    ISO C does not permit named variadic macros”
    ISO C 不允许有名的可变参数宏”

    missing ‘)’ in macro parameter list”
    在宏参数表中缺少‘)’”

    ‘##’ cannot appear at either end of a macro expansion”
    ‘##’不能出现在宏展开的两端”

    ISO C99 requires whitespace after the macro name”
    ISO C99 要求宏名后必须有空白”

    missing whitespace after the macro name”
    宏名后缺少空白”

    ‘#’ is not followed by a macro parameter”
    ‘#’后没有宏参数”

    \”%s\” redefined”
    “%s”重定义”

    this is the location of the previous definition”
    这是先前定义的位置”

    macro argument \”%s\” would be stringified in traditional C”
    宏参数“%s”将在传统 C 中被字符串化”

    invalid hash type %d in cpp_macro_definition”
    cpp_macro_definition 中有无效的散列类型 %d”

    while writing precompiled header”
    在写入预编译头时”

    %s: not used because `%.*s’ is poisoned”
    %s:未使用因为‘%.*s’已被投毒”

    %s: not used because `%.*s’ not defined”
    %s:未使用因为‘%.*s’未定义”

    %s: not used because `%.*s’ defined as `%s’ not `%.*s’”
    %s:未使用因为‘%.*s’被定义为‘%s’而非‘%*.s’”

    %s: not used because `%s’ is defined”
    %s:未使用因为‘%s’已定义”

    %s: not used because `__COUNTER__’ is invalid”
    %s:未使用因为‘__COUNTER__’无效”

    while reading precompiled header”
    在读取预编译头时”

    detected recursion whilst expanding macro \”%s\”"
    展开宏“%s”时检测到递归”

    syntax error in macro parameter list”
    宏参数列表语法错误”

    #~ warning: ”
    #~ 警告:”

    #~ internal error: ”
    #~ 内部错误:”

    #~ error: ”
    #~ 错误:”

    #~ In file included from %s:%u”
    #~ 在包含自 %s:%u 的文件中”

    #~ ”
    #~ “,\n”
    #~ ” from %s:%u”
    #~ ”
    #~ “,\n”
    #~ ” 从 %s:%u”

    #~ no newline at end of file”
    #~ 文件未以空白行结束”

    展开全文
  • #pragma once的用法及含义

    千次阅读 2013-10-24 22:20:41
    #pragma once 这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。 #pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,...

    #pragma once

    这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。
    #pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。
    #ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

    方式一:
    #ifndef   _SOMEFILE_H_
    #define  _SOMEFILE_H_
    .......... // 一些声明语句
    #endif
    方式二:
    #pragma once
    ... ... // 一些声明语句

    #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。
    #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
    方式一由语言支持所以移植性好,方式二 可以避免名字冲突
    #pragma once方式产生于#ifndef之后,因此很多人可能甚至没有听说过。目前看来#ifndef更受到推崇。因为#ifndef受语言天生的支持,不受编译器的任何限制;而#pragma once方式却不受一些较老版本的编译器支持,换言之,它的兼容性不够好。也许,再过几年等旧的编译器死绝了,这就不是什么问题了。
    我还看到一种用法是把两者放在一起的:


    #pragma once
    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 一些声明语句
    #endif


    看起来似乎是想兼有两者的优点。不过只要使用了#ifndef就会有宏名冲突的危险,所以混用两种方法似乎不能带来更多的好处,倒是会让一些不熟悉的人感到困惑。

    展开全文
  • 关于#pragma once

    千次阅读 2018-11-08 11:27:09
    #pragma once是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。  #pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,...
  • Postman使用详解

    万次阅读 多人点赞 2020-04-26 18:06:51
    用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的...
  • Pycharm简单使用教程

    万次阅读 多人点赞 2019-07-12 10:35:43
    1、下载pycharm pycharm是一种Python IDE,能够帮助我们在编写代码时提高效率。 网上提供的有专业版和教育版之分。 专业版是收费的,功能更全面点。...教育版或社区版是阉割版本,但它是免费的。...
  • VSCode详细使用教程

    万次阅读 多人点赞 2019-09-05 05:17:48
          VSCode(Visual Studio Code)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器,算是目前前端开发几乎完美的软件开发工具。 1.VSCode下载 ...2.VSCode汉化 ...
  • 在本地登录用foxmail登录qq邮箱和163邮箱,用qq邮箱发送邮件给163邮箱,并抓取smtp和pop3协议的数据包: SMTP协议数据包如下: 状态字220代表连接SMTP服务器成功 状态字250表示与服务器握手成功 ...
  • 线上发现有机器,在发生某块业务大量请求时,后面就没有日志了,查看线程状态,如图1,发现很多线程被阻塞了,查看代码发现,用到了scan,如图2,百度之后,发现该操作不会自动释放redis连接,导致redis连接被占满,...
  • swoole 2.* 使用注意事项一

    万次阅读 2018-04-12 10:55:22
    我也一直使用的是1.X版本,到目前还未使用2.X,听到网友这么说,也算给自己上了一堂课。了解情况是这样,群友使用的是swoole2.* 版本, 使用了扩展函数作为回调(1.X版本没有问题),最新协程版本(2.X)还不支持,...
  • python学习笔记6.5-类中描述符的使用

    万次阅读 2017-09-29 21:04:02
    描述符(Descriptor)就是以特殊方法get(), set(), delete()的形式实现了三...要使用一个描述符,首先要创建一个描述符类,然后把描述符的实例放在类的定义中作为类变量来使用。事例如下:#Descriptor attribute for an
  • mongoVue的使用

    万次阅读 2018-11-05 13:14:58
    MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久使用, 一、基础操作   ...2、查看特定的数据,使用的时候shell命令,需要一些基础的语法知识,详情见2.1 3、更新数据,...
  • dubbo的配置及java代码使用

    千次阅读 2018-01-26 12:42:37
    项目要基于SOA架构 SOA架构:表现层和服务层是不同的工程。一个表现层可以去调用多个服务层,例如一个后台的表现层,能调用商品服务,用户服务,索引服务等。 如何实现远程通信? ...使用rpc协议
  • 使用rz命令向Linux上传文件

    千次阅读 2020-03-16 17:13:03
    使用 yum provides */name 查找系统自带软件包的信息。并使用 yum install -y lrzsz 安装 2、使用rz上传文件: 输入‘rz’后,会弹出文件选择窗口,选择文件即可 注意: 1)文件上传目录为当前目录,即,输入...
  • 在中文搜索中,没有找到一篇比较好的关于如何在Android应用中使用自己事先创建好的数据库的文章,于是在谷歌上找到这篇英文文章,按照它的步骤,测试成功,决定把这篇文章大致的翻译一下。 这里要讲到的是,如何...
  • Unity中使用c++

    千次阅读 2017-03-13 16:03:52
    Unity具有跨平台特性,所以一般若是要使用c++分为四种情况:Windows、Android、MacOS以及IOS,对应使用生成的库文件后缀分别为”.dll”、”.so”、”.bundle”、”.a”; 1、 库文件生成 1.1 DLL 在Windows下生成...
  • React Router 使用教程

    千次阅读 2016-07-23 15:14:42
    真正学会 React 是一个漫长的过程。 你会发现,它不是一个库,也不是一个框架,而是一个庞大的体系。...它打算抛弃 DOM,要求开发者不要使用任何 DOM 方法。它甚至还抛弃了 SQL ,自己发明了一套查询语言 Gr
  • 在数据库的日常学习中,发现公司生产数据库的默认临时表空间temp使用情况达到了30G,使用率达到了100%; 待调整为32G后,使用率还是为100%,导致磁盘空间使用紧张。根据临时表空间的主要是对临时数据进行排序和缓存...
1 2 3 4 5 ... 20
收藏数 15,346,467
精华内容 6,138,587
关键字:

使用