📜  C编程有趣的事实套装2

📅  最后修改于: 2021-05-19 20:03:03             🧑  作者: Mango

以下是有关C编程的一些更有趣的事实:

1.宏可能具有不平衡的花括号:

当我们对常量使用#define时,预处理器将生成一个C程序,在其中搜索定义的常量,并将匹配的标记替换为给定的表达式。

例子:

#include 
  
// Declaring Macro
// with unbalanced brackets
#define P printf(
  
int main()
{
    int a;
    P"Hello World");
    P"%d", a);
  
    return 0;
}
输出:
Hello World0

2.使用main声明一个或多个整数变量:

例子:

#include 
  
int main(int c)
{
    for (; ++c < 28;)
        putchar(95 + c);
    return 0;
}
输出:
abcdefghijklmnopqrstuvwxyz

3.在printf()中使用“%m”时,将打印“成功”

m(转换说明符)不是C,而是printf的GNU扩展。 ‘ %m ‘转换输出与errno中错误代码相对应的字符串。

%m仅在“ errno == 0 ”时打印“ Success ”(这是最后一个观察到的错误状态的字符串表示形式)。例如,如果某个函数在printf之前失败,那么它将打印出完全不同的内容。

例子:

#include 
  
int main()
{
    printf("%m");
    return 0;
}
输出:

Success

4. brk(0);可以用作返回0的替代;

brk()sbrk()更改程序中断的位置,该位置定义了进程数据段的结尾。

例子:

#include 
  
int main()
{
    printf("%m");
    brk();
}
输出:
Success

5.无需main()就可以编写C程序

从逻辑上讲,不使用main()函数似乎不可能编写C程序。由于每个程序都必须具有main()函数,因为:-

  • 这是每个C / C++程序的入口。
  • 所有预定义和用户定义函数都可以通过主函数直接或间接调用。

但实际上,可以在没有主要函数的情况下运行C程序。

#include 
#include 
  
// entry point function
int nomain();
  
void _start()
{
  
    // calling entry point
    nomain();
    exit(0);
}
  
int nomain()
{
    puts("Geeksforgeeks");
    return 0;
}

使用以下命令进行编译:

gcc filename.c -nostartfiles
(nostartfiles option tells the compiler to avoid standard linking)

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。