就像是
int main(void){
doTenTimes({
printf("Hello World");
});
}
然后函式 doTenTimes 可以執行該代碼塊 10 次。
uj5u.com熱心網友回復:
您可能不想“傳遞代碼塊”,而是實作該功能以適應您需要做的任何事情:
void doManyTimes(int n)
{
for(int i=0; i<n; i )
printf("Hello World\n");
}
或者,您可以傳遞指向不同函式的函式指標,以單獨提供行為:
typedef void dofunc_t (void);
void print (void)
{
printf("Hello World\n");
}
void doManyTimes(dofunc_t* func, int n)
{
for(int i=0; i<n; i )
func();
}
// call:
doManyTimes(print,10);
uj5u.com熱心網友回復:
你真的不能把“裸”的代碼塊當作 C 中的資料來對待。Lundin 的方法最適合你想做的事情。
但是,為了完整起見,這里有一個使用宏的示例(FOR THE LOVE OF GOD NEVER DO THIS):
#include <stdio.h>
/**
* Wrapping in a do...while(0) keeps the compiler from bitching at
* me over the trailing semicolon when I invoke the macro in main.
*/
#define doTenTimes(STMT) do { for (size_t i = 0; i < 10; i ) STMT } while( 0 )
int main( void )
{
doTenTimes( { printf( "hello, world\n" ); } );
return 0;
}
預處理后我們得到:
int main( void )
{
do { for (size_t i = 0; i < 10; i ) {printf( "hello, world\n" ); } } while (0);
return 0;
}
它“有效”,但它超級難看,寫的時候讓我發癢。永遠不要做這樣的事情。
uj5u.com熱心網友回復:
#include <stdio.h>
void hello(void) {
puts("Hello, World!");
}
void byebye(void) {
puts("Good bye, World!");
}
int main(void) {
void (*work)(void) = hello;
for (int i = 0; i < 10; i ) work();
work = byebye;
for (int i = 0; i < 10; i ) work();
return 0;
}
查看運行在https://ideone.com/ivsxxR的代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418556.html
標籤:
