Symfony 使用一套编码标准来为我们规定如何编程以及应该使用什么风格。我的问题简短而简单。我想知道 symfony(与 ORM 学说一起)在构建和构建我的数据库时是否有一套类似的标准。
例如:
C 和 C++ 标准都指定了以下内容:
\n\n\n16.3.1 参数替换 (C++11)
\n6.10.3.1 参数替换 (C11)
\n在识别出调用类似函数的宏的参数后,将进行参数替换。替换列表中的参数,除非前面有 # 或 ## 预处理标记或后面有 ## 预处理标记(见下文),否则在其中包含的所有宏都已展开后将被相应的参数替换。在被替换之前,每个参数\xe2\x80\x99s预处理标记被完全宏替换,就好像它们形成了预处理文件的其余部分一样;没有其他可用的预处理标记。
\n
人们可以将本段解释为标准要求:
\n(1) 首先识别宏参数(以逗号分隔),然后分别展开每个参数中包含的所有宏,
\n或者
\n(2) 展开参数列表中包含的所有宏,然后识别每个参数。
\n为了说明这一点,让我们考虑以下示例代码:
\n#define CONDITION (0)\n\n#if (CONDITION > 0)\n#define FunctionAlias(par_a, par_b, par_opt, par_c) \\\n FunctionName(par_a, par_b, par_opt, par_c)\n#else\n#define FunctionAlias(par_a, par_b, par_c) \\\n FunctionName(par_a, par_b, par_c)\n#endif\n\nint global_a, global_b, global_c;\n#if (CONDITION > 0)\nint global_opt;\n#endif\n\nvoid FunctionName(int a, int b, int c)\n{\n}\n \nvoid AnotherFunction()\n{\n FunctionAlias(\n global_a,\n global_b,\n #if (CONDITION > 0)\n global_opt,\n …Run Code Online (Sandbox Code Playgroud) 根据cppref:
constexpr iterator insert( const_iterator pos, const T& value );返回值
指向插入值的迭代器。
复杂
pos 与容器末端之间距离的常数加上线性。
例外情况
如果在末尾插入单个元素时抛出异常,并且 T 为 CopyInsertable 或 std::is_nothrot_move_constructible::value 为 true,则不会产生任何影响(强异常保证)。
如果pos无效,说明文档没有明确描述以下问题:
所以,我的问题是:
std::vector::insert(pos, value) 如果无效 怎么办pos?
假设我想运行以下 C 代码片段:
scanf("%d" , &some_variable);
printf("something something\n\n");
printf("Press [enter] to continue...")
getchar(); //placed to give the user some time to read the something something
Run Code Online (Sandbox Code Playgroud)
这个片段不会暂停!问题是 会将scanf“enter”( \n)字符留在输入流1中,弄乱其后面的所有内容;在这种情况下,他们getchar()会吃掉\n而不是等待真正的新角色。
由于我被告知不要使用fflush(stdin)(我真的不明白为什么),我能想出的最佳解决方案就是在代码开头重新定义扫描函数:
void nsis(int *pointer){ //nsis arconim of: no shenanigans integer scanf
scanf("%d" , pointer);
getchar(); //this will clean the inputstream every time the scan function is called
}
Run Code Online (Sandbox Code Playgroud)
然后我们只需使用nsis代替scanf. 这应该会飞。然而,这似乎是一个真正自制的、用胶带组合在一起的解决方案。专业的 C 开发人员如何处理这个烂摊子?scanf他们根本不使用吗?他们是否只是接受使用脏输入流?这里的标准是什么?
我无法在任何地方找到明确的答案!我能找到的每个来源都提到了不同的(且粗略的)解决方案......
编辑:回应所有评论某些版本的“只是不要使用 …
type_t* x = NULL; type_t* y = NULL;鉴于我们总是x > y评估错误,C 标准是否能保证这一点?我问因为会话在初始或终端malloc缓冲区中可能吗?由此看来,人们应该小心指针比较,并且只有在处理指向同一数组元素的指针时才进行比较,松散地说。但是,保证评估为 false 很方便x > y,因为我想要一个结构,它是一个堆栈数组,具有第一个和最后一个元素的字段,如果该数组仍然有0元素,则设置这些字段很方便是NULL,并且仍然允许for循环遍历数组的元素是很方便的,而不需要显式检查数组是否有0元素或更多,所以这样的比较很方便......
也许这适用于其他Delphi(我只用了7).我们已经破解了我们的代码,以便我们相当庞大的应用程序中的几乎每个DLL都在不同的文件夹中.
我下载到插件到Delphi的99%的开源资源都将其所有源代码都放在一个文件夹中.
看起来这是一个假设,即Delphi的开发人员对其用户的编码实践做出了可能不明显的假设.
鉴于我对PHP"包含"功能的新理解,我猜我的网站上的所有页面都是.php扩展名.
这会被认为是奇怪的吗?
我曾经认为大多数页面都是.htm或.html,但是在浏览网络时,我注意到确实没有任何"标准".
如果我想从php文件调用我的菜单,我真的不认为我有选择.就像我所看到的那样,它就是这样的...所以只要反复大家就能感受到"真正的程序员"对这些问题的感受.
缓冲区溢出问题是众所周知的.因此,我们有幸使用标准库函数,如wcscat_s().微软的好心人已经创建了类似的安全字符串函数,如StringCbCat().
但我有一个问题,我需要搜索一些字符串的内存.标准库函数:
wcsstr( wchar_t* pMem, wchar_t* pStr )
Run Code Online (Sandbox Code Playgroud)
看起来很棒,但是...有时我的记忆包含垃圾,有时候是字符串.当它是垃圾时,我有时会运行已分配的内存页面,[=访问冲突].我可以写自己的功能是的.但我的问题是,是否有任何"标准"功能来进行安全字符串搜索,例如:
"wcsstr_s( wchar_t* pMem, size_t uiSize, wchar_t* pStr )" ?
Run Code Online (Sandbox Code Playgroud)
感谢名单
[编辑] 感谢Charles Bailey对我的问题的完美回答.感谢其他人的努力.
对于那些怀疑我的场景的理智的人:是的,当然,在我的记忆中永远不会有垃圾是好的.但我可以想象出现这种情况的几种情况.在我的特殊情况下,它是逆向工程,而我正在处理的内存实际上不是"我的记忆",它属于另一个我无法控制的过程.
(另一个假设场景可能是一个棘手的调试情况,需要跟踪损坏的内存.)
假设C中的整数是由硬件规范处理还是在软件中处理?
按整数,我指的是原语"int"
根本的想法是,如果C中的整数不依赖于硬件,那么让gcc实现不同的整数处理程序会违反标准.这样你就可以拥有传统的32位int处理程序,然后你也可以使用256位整数的处理程序,甚至可以使用动态大小的整数.
我确实知道long和long long,但我不确定它们是否独立于提供的硬件,我只想指定构建工具链时要使用的"int"处理程序的大小/类型.
我也理解这样做的危险(因为使用32位整数编译器构建256位整数会很糟糕!),但对于那些需要类似gmp库的代码,我认为它会使代码可读性更好.兼容性是相同的,但依赖性将在编译器而不是代码本身.
疯狂的想法,我知道......但回到最初的问题:
假设C中的整数是由硬件规范处理还是在软件中处理?
Java SE(标准版)是否提供了一种使程序在Applet旁边在线工作的方法?或者applet是唯一的方法吗?