【邮箱源码笔记】【uchome 源码】【法国源码】stdio 源码移植

时间:2024-11-23 14:51:15 来源:dnf跨界源码 分类:热点

1.#include <stdio.h>
2.怎样写一个输出自己源代码的码移程序?
3.为什么两个c源程序都包含stdio.h。 而链接时不会出现重定义,码移stdio里不是码移定义了许多函数ma?
4.# include <iostream> using namespace std; int main( ) { cout<<"this is a C++ program."; return 0; }
5.移植性和跨平台有什么区别?

stdio 源码移植

#include <stdio.h>

       å°±æ˜¯å•Š

       å“ªé‡Œæœ‰é—®é¢˜å‘¢å•Šï¼Ÿ

       ç¬¬ä¸€ä¸ªç»“果是

       -

       ç¬¬äºŒä¸ªç»“果是

       dog-is-clever

       ä½†æ˜¯æ¯ä¸ªæºä»£ç é‡Œçš„结尾都少了一个"}"

       é—®é¢˜åˆè¡¥å……了啊??第三个

       è¿™ä¸ªä¼šæŠ¥é”™çš„:主要是z = (a + b + c – x - y) * 2;

       å¯èƒ½æ˜¯å…¨è§’输入的减号,改一下就行了啊

       ç»“æžœ

       çœŸæ˜¯çš„啊!怎么老是补充啊

       è‡ªå·±è¿è¡Œä¸€ä¸‹ 多好啊

       èƒ½å¤Ÿè‡ªå·±å¾—出结果如果 运行过程中 报错就认真的改一下就行了啊

       å‘µå‘µ

       ç¥ä½ å¥½è¿

怎样写一个输出自己源代码的程序?

       要写一个可移植的自我再生的程序是件很困难的事, 部分原因是因为引用和字符集的难度。

       这里是码移邮箱源码笔记个经典的例子 (应该以一行表示的, 虽然第一次执行后它后自我修复):

        char*s="char*s=%c%s%c;main(){ printf(s,,s,);}";

        main(){ printf(s,,s,);}

       这段程序有一些依赖, 忽略了 #include <stdio.h>, 还假设了双引号 " 的值为 , 和 ASCII 中的值一样。

       这里还有一个有 James Hu 发布的码移改进版:

        #define q(k)main(){ return!puts(#k"\nq("#k")");}

        q(#define q(k)main(){ return!puts(#k"\nq("#k")");})

为什么两个c源程序都包含stdio.h。 而链接时不会出现重定义,码移stdio里不是码移定义了许多函数ma?

       1、如果引用了多次,码移会导致重复定义函数错误,码移所以多次导入需要做如下处理。码移

       2、码移uchome 源码采用#ifndef避免重复导入。码移

       格式如下:

       #ifndef __SOMEFILE _H_

       #define __SOMEFILE _H_

       ...//一些声明语句

       #endif

               #ifdndef的码移方式依赖于宏名不允许冲突。这不光可以保证同一个文件不会被包含多次,码移也能保证内容完全相同的码移两个文件不会不小心被同时包含。缺点是法国源码如果不同头文件的宏名不小心相同,那么可能会导致头文件明明被include了,编译器却说找不到声明的状况。

       3、你说多次导入没问题,那应该是anywhereanything源码用了2的方法

# include <iostream> using namespace std; int main( ) { cout<<"this is a C++ program."; return 0; }

       ç¬¬ä¸€å¥æ˜¯å®ï¼Œä¸æ˜¯C++语句,所以不以将宏和“要执行的”语句放在一起。所以,只能写成:

       #include <iostream>

       using namespace std; int main() { cout << "this is a C++ program."; return 0; }

       åœ¨ç¼–译系统里,宏是首先被宏处理器处理,得到完整的C++源代码文件,然后再由编译器处理……。

       æ‰€ä»¥ï¼Œé™¤äº†å®æ‰€å¿…须的部分,C++代码不能得宏在同一行。

       æœ‰çš„时候,你用Unix系列的操作系统编辑器编写了一个代码文件,这个程序可以移植,移到列如Windows操作系统,用它们的文本编辑器打开文件里,发现语句几乎在同一行里,没有问题的。

移植性和跨平台有什么区别?

       有区别!

       移植性,表示源代码在多种系统上几乎不经过修改就可以成功编译。为了达到移植性,尽量按照标准书写代码,如:

       void main()

       {

        printf("hello world");

       }

       这样的棕色源码代码在有的编译器,如VC6上就可以通过编译,但在其它编译器上就不能被编译,因为它缺少包括的头文件stdio.h,以及main函数返回值不是整形。另外,如果使用了某编译器的扩展函数,如Borland C扩展的 dos.h中的函数,如findfirst, findnext等,这样的代码也不具有移植性。

       跨平台主要表示编制一些依赖平台的软件,如一个gui程序,在windows上有着标准的windows窗口和窗口程序。你使用一种编程扩展,如QT编制这类程序,在windows下可以编译为标准windows窗口程序,而在linux下可以具有标准的X窗口程序,其中你编制的源代码只有一份,具体的平台依赖性是通过第三方软件或工具如QT完成的。