www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 21ic電子網(wǎng)
[導(dǎo)讀]main的返回值 main函數(shù)的返回值用于說(shuō)明程序的退出狀態(tài)。如果返回0,則代表程序正常退出。返回其它數(shù)字的含義則由系統(tǒng)決定。通常,返回非零代表程序異常退出。

main的返回值

main函數(shù)的返回值用于說(shuō)明程序的退出狀態(tài)。如果返回0,則代表程序正常退出。返回其它數(shù)字的含義則由系統(tǒng)決定。通常,返回非零代表程序異常退出。

void main()

有一些書上的,都使用了void main( ) ,其實(shí)這是錯(cuò)誤的。C/C++ 中從來(lái)沒(méi)有定義過(guò)void main( ) 。

C++ 之父 Bjarne Stroustrup 在他的主頁(yè)上的 FAQ 中明確地寫著 “The definition void main( ) { /* … */ } is not and never has been C++, nor has it even been C.” 這可能是因?yàn)?在 C 和 C++ 中,不接收任何參數(shù)也不返回任何信息的函數(shù)原型為“void foo(void);”。

可能正是因?yàn)檫@個(gè),所以很多人都誤認(rèn)為如果不需要程序返回值時(shí)可以把main函數(shù)定義成void main(void) 。然而這是錯(cuò)誤的!main 函數(shù)的返回值應(yīng)該定義為 int 類型,C 和 C++ 標(biāo)準(zhǔn)中都是這樣規(guī)定的。

雖然在一些編譯器中,void main() 可以通過(guò)編譯,但并非所有編譯器都支持 void main() ,因?yàn)闃?biāo)準(zhǔn)中從來(lái)沒(méi)有定義過(guò) void main 。

g++3.2 中如果 main 函數(shù)的返回值不是 int 類型,就根本通不過(guò)編譯。而 gcc3.2 則會(huì)發(fā)出警告。所以,為了程序擁有很好的可移植性,一定要用 int main ()。測(cè)試如下:

#include?

void?main()
{
????printf("Hello?world\n");
????return;
}

運(yùn)行結(jié)果:g++ test.c

干貨!深度剖析C語(yǔ)言的main函數(shù)

main()

那既然main函數(shù)只有一種返回值類型,那么是不是可以不寫?規(guī)定:不明確標(biāo)明返回值的,默認(rèn)返回值為int,也就是說(shuō) main()等同于int main(),而不是等同于void main()。

在C99中,標(biāo)準(zhǔn)要求編譯器至少給 main() 這種用法來(lái)個(gè)警告,而在c89中這種寫法是被允許的。但為了程序的規(guī)范性和可讀性,還是應(yīng)該明確的指出返回值的類型。測(cè)試代碼:

#include?

main()
{
????printf("Hello?world\n");
????return?0;
}

運(yùn)行結(jié)果:

干貨!深度剖析C語(yǔ)言的main函數(shù)

C和C++的標(biāo)準(zhǔn)

在 C99 標(biāo)準(zhǔn)中,只有以下兩種定義方式是正確的:

int?main(?void?)?
int?main(?int?argc,?char?*argv[]?)?

若不需要從命令行中獲取參數(shù),就使用int main(void) ;否則的話,就用int main( int argc, char *argv[] )。當(dāng)然參數(shù)的傳遞還可以有其他的方式,在下一節(jié)中,會(huì)單獨(dú)來(lái)講。

main 函數(shù)的返回值類型必須是 int ,這樣返回值才能傳遞給程序的調(diào)用者(如操作系統(tǒng)),等同于 exit(0),來(lái)判斷函數(shù)的執(zhí)行結(jié)果。

C++89中定義了如下兩種 main 函數(shù)的定義方式:

int?main(?)?
int?main(?int?argc,?char?*argv[]?)?

int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char*argv[] ) 的用法也和C99 中定義的一樣。同樣,main函數(shù)的返回值類型也必須是int。

return 語(yǔ)句

如果 main 函數(shù)的最后沒(méi)有寫 return 語(yǔ)句的話,C99 和c++89都規(guī)定編譯器要自動(dòng)在生成的目標(biāo)文件中加入return 0,表示程序正常退出。

不過(guò),建議你最好在main函數(shù)的最后加上return語(yǔ)句,雖然沒(méi)有這個(gè)必要,但這是一個(gè)好的習(xí)慣。在linux下我們可以使用shell命令:echo $? 查看函數(shù)的返回值。

#include?

int?main()
{
????printf("Hello?world\n");
}

運(yùn)行結(jié)果:

干貨!深度剖析C語(yǔ)言的main函數(shù)

同時(shí),需要說(shuō)明的是return的返回值會(huì)進(jìn)行 類型轉(zhuǎn)換,比如:若return 1.2 ;會(huì)將其強(qiáng)制轉(zhuǎn)換為1,即真正的返回值是1,同理,return ‘a(chǎn)’ ;的話,真正的返回值就是97,;但是若return “abc”;便會(huì)報(bào)警告,因?yàn)闊o(wú)法進(jìn)行隱式類型轉(zhuǎn)換。

測(cè)試main函數(shù)返回值的意義

前文說(shuō)到,main函數(shù)如果返回0,則代表程序正常退出。通常,返回非零代表程序異常退出。在本文的最后,測(cè)試一下:  test.c:

#include?

int?main()
{
????printf("c?語(yǔ)言\n");
????return?11.1;?
}

在終端執(zhí)行如下:

??testSigpipe?git:(master)??vim?test.c
??testSigpipe?git:(master)??gcc?test.c
??testSigpipe?git:(master)??./a.out?&&?echo?"hello?world"??#&&與運(yùn)算,前面為真,才會(huì)執(zhí)行后邊的
c?語(yǔ)言

可以看出,操作系統(tǒng)認(rèn)為main函數(shù)執(zhí)行失敗,因?yàn)閙ain函數(shù)的返回值是11

??testSigpipe?git:(master)??./a.out?
??testSigpipe?git:(master)??echo?$?
11

若將main函數(shù)中返回值該為0的話:

??testSigpipe?git:(master)??vim?test.c
??testSigpipe?git:(master)??gcc?test.c?
??testSigpipe?git:(master)??./a.out?&&?echo?"hello?world"?#hello
c?語(yǔ)言
hello?world

可以看出,正如我們所期望的一樣,main函數(shù)返回0,代表函數(shù)正常退出,執(zhí)行成功;返回非0,代表函數(shù)出先異常,執(zhí)行失敗。

main函數(shù)傳參

首先說(shuō)明的是,可能有些人認(rèn)為main函數(shù)是不可傳入?yún)?shù)的,但是實(shí)際上這是錯(cuò)誤的。main函數(shù)可以從命令行獲取參數(shù),從而提高代碼的復(fù)用性。

函數(shù)原形

為main函數(shù)傳參時(shí),可選的main函數(shù)原形為:

int?main(int?argc?,?char*?argv[],char*?envp[]);

參數(shù)說(shuō)明:

①、第一個(gè)參數(shù)argc表示的是傳入?yún)?shù)的個(gè)數(shù) 。

②、第二個(gè)參數(shù)char* argv[],是字符串?dāng)?shù)組,用來(lái)存放指向的字符串參數(shù)的指針數(shù)組,每一個(gè)元素指向一個(gè)參數(shù)。各成員含義如下:

argv[0]:指向程序運(yùn)行的全路徑名。

argv[1]:指向執(zhí)行程序名后的第一個(gè)字符串 ,表示真正傳入的第一個(gè)參數(shù)。

argv[2]:指向執(zhí)行程序名后的第二個(gè)字符串 ,表示傳入的第二個(gè)參數(shù)。

…… argv[n]:指向執(zhí)行程序名后的第n個(gè)字符串 ,表示傳入的第n個(gè)參數(shù)。

規(guī)定:argv[argc]為NULL ,表示參數(shù)的結(jié)尾。

③、第三個(gè)參數(shù)char* envp[],也是一個(gè)字符串?dāng)?shù)組,主要是保存這用戶環(huán)境中的變量字符串,以NULL結(jié)束。envp[]的每一個(gè)元素都包含ENVVAR=value形式的字符串,其中ENVVAR為環(huán)境變量,value為其對(duì)應(yīng)的值。

envp一旦傳入,它就只是單純的字符串?dāng)?shù)組而已,不會(huì)隨著程序動(dòng)態(tài)設(shè)置發(fā)生改變??梢允褂胮utenv函數(shù)實(shí)時(shí)修改環(huán)境變量,也能使用getenv實(shí)時(shí)查看環(huán)境變量,但是envp本身不會(huì)發(fā)生改變;平時(shí)使用到的比較少。

注意:main函數(shù)的參數(shù)char* argv[]和char* envp[]表示的是字符串?dāng)?shù)組,書寫形式不止char* argv[]這一種,相應(yīng)的argv[][]和 char** argv均可。

char* envp[]

寫個(gè)小測(cè)試程序,測(cè)試main函數(shù)的第三個(gè)參數(shù):

#include?

int?main(int?argc?,char*?argv[]?,char*?envp[])
{
????int?i?=?0;

????while(envp[i++])
????{
????????printf("%s\n",?envp[i]);
????}

????return?0;
}

運(yùn)行結(jié)果:部分截圖

干貨!深度剖析C語(yǔ)言的main函數(shù)

envp[] 獲得的信息等同于Linux下env命令的結(jié)果。

常用版本

在使用main函數(shù)的帶參版本的時(shí),最常用的就是:**int main(int argc , char* argv[]);**變量名稱argc和argv是常規(guī)的名稱,當(dāng)然也可以換成其他名稱。

命令行執(zhí)行的形式為:可執(zhí)行文件名 參數(shù)1 參數(shù)2 … … 參數(shù)n。可執(zhí)行文件名稱和參數(shù)、參數(shù)之間均使用空格隔開(kāi)。

示例程序

#include?

int?main(int?argc,?char*?argv[])
{

????int?i;
????printf("Total?%d?arguments\n",argc);

????for(i?=?0;?i?????{
????????printf("\nArgument?argv[%d]??=?%s?\n",i,?argv[i]);
????}

????return?0;
}

運(yùn)行結(jié)果:

??cpp_workspace?git:(master)??vim?testmain.c?
??cpp_workspace?git:(master)??gcc?testmain.c?
??cpp_workspace?git:(master)??./a.out?1?2?3????#./a.out為程序名?1為第一個(gè)參數(shù)?,?2?為第二個(gè)參數(shù),?3?為第三個(gè)參數(shù)
Total?4?arguments
Argument?argv[0]??=?./a.out?
Argument?argv[1]??=?1?
Argument?argv[2]??=?2?
Argument?argv[3]??=?3?
Argument?argv[4]??=?(null)????#默認(rèn)argv[argc]為null

main的執(zhí)行順序

可能有的人會(huì)說(shuō),這還用說(shuō),main函數(shù)肯定是程序執(zhí)行的第一個(gè)函數(shù)。那么,事實(shí)果然如此嗎?相信在看了本節(jié)之后,會(huì)有不一樣的認(rèn)識(shí)。

為什么說(shuō)main()是程序的入口

linux系統(tǒng)下程序的入口是”_start”,這個(gè)函數(shù)是linux系統(tǒng)庫(kù)(Glibc)的一部分,當(dāng)我們的程序和Glibc鏈接在一起形成最終的可執(zhí)行文件的之后,這個(gè)函數(shù)就是程序執(zhí)行初始化的入口函數(shù)。通過(guò)一個(gè)測(cè)試程序來(lái)說(shuō)明:

#include?

int?main()
{
????printf("Hello?world\n");
????return?0;
}

編譯:

gcc testmain.c -nostdlib    ?。?-nostdlib (不鏈接標(biāo)準(zhǔn)庫(kù))

程序執(zhí)行會(huì)引發(fā)錯(cuò)誤:/usr/bin/ld: warning: cannot find entry symbol _start; 未找到這個(gè)符號(hào)

所以說(shuō):

  1. 編譯器缺省是找 __start 符號(hào),而不是 main
  2. __start 這個(gè)符號(hào)是程序的起始
  3. main 是被標(biāo)準(zhǔn)庫(kù)調(diào)用的一個(gè)符號(hào)

那么,這個(gè)_start和main函數(shù)有什么關(guān)系呢?下面我們來(lái)進(jìn)行進(jìn)一步探究。

_start函數(shù)的實(shí)現(xiàn)該入口是由ld鏈接器默認(rèn)的鏈接腳本指定的,當(dāng)然用戶也可以通過(guò)參數(shù)進(jìn)行設(shè)定。_start由匯編代碼實(shí)現(xiàn)。大致用如下偽代碼表示:

void?_start()
{
??%ebp?=?0;
??int?argc?=?pop?from?stack
??char?**?argv?=?top?of?stack;
??__libc_start_main(main,?argc,?argv,?__libc_csu_init,?__linc_csu_fini,
??edx,?top?of?stack);
}

對(duì)應(yīng)的匯編代碼如下:

_start:
?xor?ebp,?ebp?//清空ebp
?pop?esi?//保存argc,esi?=?argc
?mov?esp,?ecx?//保存argv,?ecx?=?argv

?push?esp?//參數(shù)7保存當(dāng)前棧頂
?push?edx?//參數(shù)6
?push?__libc_csu_fini//參數(shù)5
?push?__libc_csu_init//參數(shù)4
?push?ecx?//參數(shù)3
?push?esi?//參數(shù)2
?push?main//參數(shù)1
?call?_libc_start_main

hlt

可以看出,在調(diào)用_start之前,裝載器就會(huì)將用戶的參數(shù)和環(huán)境變量壓入棧中。

main函數(shù)運(yùn)行之前的工作

從_start的實(shí)現(xiàn)可以看出,main函數(shù)執(zhí)行之前還要做一系列的工作。主要就是初始化系統(tǒng)相關(guān)資源:

Some?of?the?stuff?that?has?to?happen?before?main():

set?up?initial?stack?pointer?

initialize?static?and?global?data?

zero?out?uninitialized?data?

run?global?constructors

Some?of?this?comes?with?the?runtime?library's?crt0.o?file?or?its?__start()?function.?Some?of?it?you?need?to?do?yourself.

Crt0?is?a?synonym?for?the?C?runtime?library.

1.設(shè)置棧指針

2.初始化static靜態(tài)和global全局變量,即data段的內(nèi)容

3.將未初始化部分的賦初值:數(shù)值型short,int,long等為0,bool為FALSE,指針為NULL,等等,即.bss段的內(nèi)容

4.運(yùn)行全局構(gòu)造器,類似c++中全局構(gòu)造函數(shù)

5.將main函數(shù)的參數(shù),argc,argv等傳遞給main函數(shù),然后才真正運(yùn)行main函數(shù)

main之前運(yùn)行的代碼

下面,我們就來(lái)說(shuō)說(shuō)在mian函數(shù)執(zhí)行之前到底會(huì)運(yùn)行哪些代碼:(1)全局對(duì)象的構(gòu)造函數(shù)會(huì)在main 函數(shù)之前執(zhí)行。

(2)一些全局變量、對(duì)象和靜態(tài)變量、對(duì)象的空間分配和賦初值就是在執(zhí)行main函數(shù)之前,而main函數(shù)執(zhí)行完后,還要去執(zhí)行一些諸如釋放空間、釋放資源使用權(quán)等操作

(3)進(jìn)程啟動(dòng)后,要執(zhí)行一些初始化代碼(如設(shè)置環(huán)境變量等),然后跳轉(zhuǎn)到main執(zhí)行。全局對(duì)象的構(gòu)造也在main之前。

(4)通過(guò)關(guān)鍵字attribute,讓一個(gè)函數(shù)在主函數(shù)之前運(yùn)行,進(jìn)行一些數(shù)據(jù)初始化、模塊加載驗(yàn)證等。

示例代碼

①、通過(guò)關(guān)鍵字attribute

#include?

__attribute__((constructor))?void?before_main_to_run()?
{?
????printf("Hi~,i?am?called?before?the?main?function!\n");
????printf("%s\n",__FUNCTION__);?
}?

__attribute__((destructor))?void?after_main_to_run()?
{?
????printf("%s\n",__FUNCTION__);?
????printf("Hi~,i?am?called?after?the?main?function!\n");
}?

int?main(?int?argc,?char?**?argv?)?
{?
????printf("i?am?main?function,?and?i?can?get?my?name(%s)?by?this?way.\n",__FUNCTION__);?
????return?0;?
}

②、全局變量的初始化

#include?

using?namespace?std;

inline?int?startup_1()
{
????cout<<"startup_1?run"<<endl;
????return?0;
}

int?static?no_use_variable_startup_1?=?startup_1();

int?main(int?argc,?const?char?*?argv[])?
{
????cout<<"this?is?main"<<endl;
????return?0;
}

至此,我們就聊完了main函數(shù)執(zhí)行之前的事情,那么,你是否還以為main函數(shù)也是程序運(yùn)行的最后一個(gè)函數(shù)呢?

結(jié)果當(dāng)然不是,在main函數(shù)運(yùn)行之后還有其他函數(shù)可以執(zhí)行,main函數(shù)執(zhí)行完畢之后,返回到入口函數(shù),入口函數(shù)進(jìn)行清理工作,包括全局變量析構(gòu)、堆銷毀、關(guān)閉I/O等,然后進(jìn)行系統(tǒng)調(diào)用結(jié)束進(jìn)程。

main函數(shù)之后執(zhí)行的函數(shù)

1、全局對(duì)象的析構(gòu)函數(shù)會(huì)在main函數(shù)之后執(zhí)行; 2、用atexit注冊(cè)的函數(shù)也會(huì)在main之后執(zhí)行。

atexit函數(shù)

原形:

int?atexit(void?(*func)(void));?

atexit 函數(shù)可以“注冊(cè)”一個(gè)函數(shù),使這個(gè)函數(shù)將在main函數(shù)正常終止時(shí)被調(diào)用,當(dāng)程序異常終止時(shí),通過(guò)它注冊(cè)的函數(shù)并不會(huì)被調(diào)用。

編譯器必須至少允許程序員注冊(cè)32個(gè)函數(shù)。如果注冊(cè)成功,atexit 返回0,否則返回非零值,沒(méi)有辦法取消一個(gè)函數(shù)的注冊(cè)。

在 exit 所執(zhí)行的任何標(biāo)準(zhǔn)清理操作之前,被注冊(cè)的函數(shù)按照與注冊(cè)順序相反的順序被依次調(diào)用。每個(gè)被調(diào)用的函數(shù)不接受任何參數(shù),并且返回類型是 void。被注冊(cè)的函數(shù)不應(yīng)該試圖引用任何存儲(chǔ)類別為 auto 或 register 的對(duì)象(例如通過(guò)指針),除非是它自己所定義的。

多次注冊(cè)同一個(gè)函數(shù)將導(dǎo)致這個(gè)函數(shù)被多次調(diào)用。函數(shù)調(diào)用的最后的操作就是出棧過(guò)程。main()同樣也是一個(gè)函數(shù),在結(jié)束時(shí),按出棧的順序調(diào)用使用atexit函數(shù)注冊(cè)的,所以說(shuō),函數(shù)atexit是注冊(cè)的函數(shù)和函數(shù)入棧出棧一樣,是先進(jìn)后出的,先注冊(cè)的后執(zhí)行。通過(guò)atexit可以注冊(cè)回調(diào)清理函數(shù)??梢栽谶@些函數(shù)中加入一些清理工作,比如內(nèi)存釋放、關(guān)閉打開(kāi)的文件、關(guān)閉socket描述符、釋放鎖等等。

#include
#include

void?fn0(?void?),?fn1(?void?),?fn2(?void?),?fn3(?void?),?fn4(?void?);

int?main(?void?)

{
??//注意使用atexit注冊(cè)的函數(shù)的執(zhí)行順序:先注冊(cè)的后執(zhí)行
????atexit(?fn0?);??
????atexit(?fn1?);??
????atexit(?fn2?);??
????atexit(?fn3?);??
????atexit(?fn4?);

????printf(?"This?is?executed?first.\n"?);
????printf("main?will?quit?now!\n");

????return?0;

}

void?fn0()
{
????printf(?"first?register?,last?call\n"?);
}

void?fn1(
{
????printf(?"next.\n"?);
}

void?fn2()
{
????printf(?"executed?"?);
}

void?fn3()
{
????printf(?"is?"?);
}

void?fn4()
{
????printf(?"This?"?);
}


最后

以上就是本次的分享,如果覺(jué)得文章不錯(cuò),轉(zhuǎn)發(fā)、在看,也是我們繼續(xù)更新的動(dòng)力。



來(lái)源:https://blog.csdn.net/z_ryan/category_7316855.html

作者z_ryan


版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。

干貨!深度剖析C語(yǔ)言的main函數(shù)

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉