在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?
每个答案只能有一个功能.
该ç预处理器有理由担心和C++社区避之唯恐不及.内联功能,功能和模板通常是更安全和更好的替代品#define.
以下宏:
#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
Run Code Online (Sandbox Code Playgroud)
绝不是优于安全类型:
inline bool succeeded(int hr) { return hr >= 0; }
Run Code Online (Sandbox Code Playgroud)
但宏确实有它们的位置,请列出您为宏找到的用途,如果没有预处理器,您就无法做到.
请将每个用例放在一个单独的答案中,以便可以进行投票,如果您知道如何在没有预备教授的情况下实现其中一个答案,请指出该答案的评论.
你看到它用于for循环语句,但它在任何地方都是合法的语法.您在其他地方找到了什么用途,如果有的话?
C#能否像使用预处理器语句在C编程语言中那样定义宏?我想简化某些重复语句的常规输入,如下所示:
Console.WriteLine("foo");
Run Code Online (Sandbox Code Playgroud) 正如问题所说,C预处理器能够做到吗?
例如:
#define PI 3.1416
#define OP PI/100
#define OP2 PI%100
Run Code Online (Sandbox Code Playgroud)
OP和/或OP2在预处理阶段是否有任何计算方法?
我正在尝试一些尴尬的预处理,并得出类似这样的东西:
#include <stdio.h>
#define SIX =6
int main(void)
{
int x=6;
int y=2;
if(x=SIX)
printf("X == 6\n");
if(y=SIX)
printf("Y==6\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc给了我错误:
test.c:在函数'main'中:
test.c:10:8:错误:'='之前的预期表达式
test test.c:12:8:错误:'='之前的预期表达式令牌
这是为什么?
我已经是Java和VB.Net程序员已经有4年了,还有一个C#程序员已经有6个月了.我还使用了一堆动态语言,如Perl,Python,PHP和JavaScript.
我从来不需要预处理器.
我的问题是:为什么你会在C,C++和Objective-C中看到如此广泛使用预处理器,但很少(或从不)在Java,C#或Scala等语言中看到它?
我正在写一个关于极长功能的小型学术研究项目.显然,我不是在寻找编程错误的例子,而是寻找100,200和600行长函数的例子.
我将使用为希伯来大学编写的硕士学位编写的脚本来调查Linux内核源代码,该脚本测量不同的参数,如代码行数,函数复杂度(由MCC测量)和其他好东西.顺便说一句,这是一个关于代码分析和推荐阅读材料的简洁研究.
我很感兴趣,如果你能想出为什么任何函数应该特别长的任何好理由?我将研究C,但任何语言的例子和论据都会很有用.
我目前正在用C编写代码,它从整个ASCII可用字符中选择符号和数字.作为程序员的初学者,我经常这样做
if ((i > 25 && i < 50) || (i > 100 && i < 200)) { contents }
Run Code Online (Sandbox Code Playgroud)
对于变量i在25~50之间,100~200之间(不包括)以适应条件.
如果我想设置多个范围,如32~64(! to @)和91~96([ to `)和123~126({ to ~)那么会有更好的(意味着更短或更简单的代码)或者我应该坚持使用这种方法,继续添加每个范围如上面的代码?