以下是有关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基础课程》。