本文学习自狄泰软件学院 唐佐林老师的 C++深度解析教程,图片全部来源于课程PPT,仅用于个人学习记录
第1课 - 学习 C++ 的意义
第2课 - C 到 C++ 的升级
C++代码-register与重复全局变量
#include <stdio.h>int g_v;
//int g_v;int main(int argc, char *argv[])
{printf("Begin...\n");int c = 0;for(int i=1; i<=3; i++){for(int j=1; j<=3; j++){c += i * j;}}printf("c = %d\n", c);register int a = 0;printf("&a = %p\n", &a);printf("End...\n");return 0;
}
cmd命令
D:\Users\cyz1994\Cxuexi\g++>g++ 2-1.cppD:\Users\cyz1994\Cxuexi\g++>a
Begin...
c = 36
&a = 000000000061FE10
End...//C++ 编译运行OKD:\Users\cyz1994\Cxuexi\g++>gcc 2-1.c
2-1.c: In function 'main':
2-1.c:24:5: error: address of register variable 'a' requestedprintf("&a = %p\n", &a);// C编译报错
C++代码
#include <stdio.h>struct Student
{const char* name;int age;
};f(i)
{printf("i = %d\n", i);
}g()
{return 5;
}int main(int argc, char *argv[])
{Student s1 = {"Delphi", 30};Student s2 = {"Tang", 30};f(10);printf("g() = %d\n", g(1,2,3,4,5));return 0;
}
cmd
D:\Users\cyz1994\Cxuexi\g++>g++ 2-2.cpp
2-2.cpp:9:2: error: expected constructor, destructor, or type conversion before '(' tokenf(i)^
2-2.cpp: In function 'int main(int, char**)':
2-2.cpp:25:5: error: 'f' was not declared in this scopef(10);^
2-2.cpp:27:37: error: too many arguments to function 'int g()'printf("g() = %d\n", g(1,2,3,4,5));^
2-2.cpp:14:1: note: declared hereg()^
/*注释g() f()相关行后 编译成功*/
D:\Users\cyz1994\Cxuexi\g++>g++ 2-2.cppD:\Users\cyz1994\Cxuexi\g++>a
复制到C文件后,GCC编译
D:\Users\cyz1994\Cxuexi\g++>gcc 2-2.c
2-2.c: In function 'main':
2-2.c:22:5: error: unknown type name 'Student'; use 'struct' keyword to refer to the typeStudent s1 = {"Delphi", 30};^~~~~~~struct
2-2.c:22:19: warning: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]Student s1 = {"Delphi", 30};^~~~~~~~
2-2.c:22:19: note: (near initialization for 's1')
2-2.c:22:29: warning: excess elements in scalar initializerStudent s1 = {"Delphi", 30};^~
2-2.c:22:29: note: (near initialization for 's1')
2-2.c:23:5: error: unknown type name 'Student'; use 'struct' keyword to refer to the typeStudent s2 = {"Tang", 30};^~~~~~~struct
2-2.c:23:19: warning: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]Student s2 = {"Tang", 30};^~~~~~
2-2.c:23:19: note: (near initialization for 's2')
2-2.c:23:27: warning: excess elements in scalar initializerStudent s2 = {"Tang", 30};^~
2-2.c:23:27: note: (near initialization for 's2')//添加 typedef后编译成功
D:\Users\cyz1994\Cxuexi\g++>gcc 2-2.cD:\Users\cyz1994\Cxuexi\g++>gcc 2-2.c
2-2.c:9:1: warning: return type defaults to 'int' [-Wimplicit-int]f(i)^
2-2.c: In function 'f':
2-2.c:9:1: warning: type of 'i' defaults to 'int' [-Wimplicit-int]
2-2.c: At top level:
2-2.c:14:1: warning: return type defaults to 'int' [-Wimplicit-int]g()^D:\Users\cyz1994\Cxuexi\g++>a
i = 10
g() = 5
C代码
#include <stdio.h>
typedef struct Student_t Student;
struct Student_t
{const char* name;int age;
};f(i)
{printf("i = %d\n", i);
}g()
{return 5;
}int main(int argc, char *argv[])
{Student s1 = {"Delphi", 30};Student s2 = {"Tang", 30};f(10);printf("g() = %d\n", g(1,2,3,4,5));return 0;
}